Xpath - 查找特定元素,打印该节点的所有元素
Xpath - Find specific element, print all elements of that node
给定元素的以下 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>
期望的输出(其中 sequenceNumber=12345):
<Contract>
<contractor>44444</contractor>
<sequenceNumber>12345</sequenceNumber>
<info1>abcd</info1>
</Contract>
我假设你指的是 sequenceNumber,按照 xml 的例子,如果是这样的话,那么你可能需要对 return 节点合约做这样的事情:
xmllint --xpath "//sequenceNumber[.="12345"]/.." test.xml
不幸的是,您必须处理可怕的名称空间...试试这样:
xmllint --xpath "//*[local-name()='Contract'] [.//*[local-name()='sequenceNumber'][./text()='12345']]" test.xml
看看它是否有效。
给定元素的以下 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>
期望的输出(其中 sequenceNumber=12345):
<Contract>
<contractor>44444</contractor>
<sequenceNumber>12345</sequenceNumber>
<info1>abcd</info1>
</Contract>
我假设你指的是 sequenceNumber,按照 xml 的例子,如果是这样的话,那么你可能需要对 return 节点合约做这样的事情:
xmllint --xpath "//sequenceNumber[.="12345"]/.." test.xml
不幸的是,您必须处理可怕的名称空间...试试这样:
xmllint --xpath "//*[local-name()='Contract'] [.//*[local-name()='sequenceNumber'][./text()='12345']]" test.xml
看看它是否有效。