如何用xmllint提取XML中指定Property对应的Values/String值?
正确提取目标字符串的方法
你的XPath没有过滤对应Property的ExtraMetaData节点,所以返回了所有<Property>值为C_PQIDSERVERJOBOPTIONS的<ExtraMetaData>节点,再提取其下的<Values>/<String>文本。
修正后的xmllint命令
xmllint --xpath "//*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='GetObjectsResponse']/Objects/Object/MetaData/ExtraMetaData/ExtraMetaData[*[local-name()='Property']='C_PQIDSERVERJOBOPTIONS']/Values/String/text()" "MyXML.xml"
关键说明
- 核心修正点:在
ExtraMetaData节点后追加条件[*[local-name()='Property']='C_PQIDSERVERJOBOPTIONS'],这会筛选出包含<Property>C_PQIDSERVERJOBOPTIONS</Property>的目标节点,避免匹配其他无关的ExtraMetaData节点。 - 如果你知道XML的命名空间URI,可以用更简洁的写法(需替换为实际命名空间):
xmllint --xpath "//ns:Envelope/ns:Body/ns:GetObjectsResponse/Objects/Object/MetaData/ExtraMetaData/ExtraMetaData[ns:Property='C_PQIDSERVERJOBOPTIONS']/Values/String/text()" --xpath-namespace "ns=http://your-actual-namespace.com" "MyXML.xml"
内容的提问来源于stack exchange,提问作者FrankT
相关产品推荐
相关产品推荐

