Xpath-查找特定元素,打印该节点的所有元素

Xpath-查找特定元素,打印该节点的所有元素,xpath,xml-namespaces,xmllint,Xpath,Xml Namespaces,Xmllint,给定元素的以下Xpath /std:Batch/BatchSection/ContractPartner/Contractor/Contract/contractNumber 如何打印节点契约的所有子元素 其中sequenceNumber=12345 我试过了 xmllint --xpath "string(/std:Batch/BatchSection/ContractPartner/Contractor/Contract/contractNumber[contractNumber

给定元素的以下Xpath

/std:Batch/BatchSection/ContractPartner/Contractor/Contract/contractNumber
如何打印节点契约的所有子元素 其中sequenceNumber=12345

我试过了

xmllint --xpath "string(/std:Batch/BatchSection/ContractPartner/Contractor/Contract/contractNumber[contractNumber='12345'])" test.xml
但是,这是一个无效的XPath表达式。如何解决这个问题

输入示例:

<std:Batch xmlns:std="http://www.test.com/contractBatch" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <year>2020</year>
  <batchType>3</batchType>
  <runDate>2020-04-11</runDate>
  <text>Datatest</text>
  <jobInfo>Test</jobInfo>
  <BatchSection>
    <addedAtDate>2020-04-11</addedAtDate>
    <ContractPartner>
      <contractDealerAG>44444</contractDealerAG>
      <contractorType/>
      <isoCountry>NL</isoCountry>
      <language>EN</language>
      <Contractor>
        <contractor>44444</contractor>
        <Contract>
          <contractor>44444</contractor>
          <sequenceNumber>12345</sequenceNumber>
          <info1>abcd</info1>
        </Contract>
      </Contractor>
    </ContractPartner>
  </BatchSection>
</std:Batch>

2020
3.
2020-04-11
数据测试
试验
2020-04-11
44444
NL
EN
44444
44444
12345
abcd
所需输出(其中sequenceNumber=12345):


44444
12345
abcd

我假设您指的是sequenceNumber,根据xml示例,如果是这种情况,那么您可能需要执行以下操作以返回节点契约:

xmllint --xpath "//sequenceNumber[.="12345"]/.." test.xml

不幸的是,您必须处理可怕的名称空间。。。试着这样做:

xmllint --xpath "//*[local-name()='Contract'] [.//*[local-name()='sequenceNumber'][./text()='12345']]" test.xml

看看它是否有效。

根据我的帖子的有效性编辑了我的帖子。这正是我需要的,效果非常好。谢谢处理名称空间意味着必须在每个元素前面加上前缀local-name()。@royskatt不幸的是,名称空间的含义远不止这些。您必须查找它(例如,在这里:)。
xmllint --xpath "//*[local-name()='Contract'] [.//*[local-name()='sequenceNumber'][./text()='12345']]" test.xml