如何使用xmllint从XML中读取指定数组的元素值
解决Jetty XML配置中提取指定Array下Item值的问题
正确的xmllint命令
要提取id="includedCipherSuites"的Array节点下所有Item元素的值,直接使用以下xpath表达式即可:
xmllint --xpath '//Configure/Array[@id="includedCipherSuites"]/Item/text()' jetty.xml
执行后会按行输出每个Item的文本内容:
TLS_AES_128_GCM_SHA256 TLS_AES_256_GCM_SHA384 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
如果需要将结果转为逗号分隔的单行格式,可以结合tr和sed命令处理:
xmllint --xpath '//Configure/Array[@id="includedCipherSuites"]/Item/text()' jetty.xml | tr '\n' ',' | sed 's/,$//'
执行结果与你期望的一致:
TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
关于你之前遇到的索引问题
你用//Configure/Array[0]/@id返回空结果,是因为XPath的节点索引从1开始计数,而非0。第一个Array节点对应//Configure/Array[1]/@id,也就是includedCipherSuites;第二个Array节点才是Array[2],对应includedProtocols。
内容的提问来源于stack exchange,提问作者Blue
相关产品推荐
相关产品推荐

