具有XML名称空间的不太复杂的XPath表达式

时间:2020-01-12 14:35:45

标签: xml xpath xml-namespaces

我使用xpath从具有名称空间的XML提取值。 XML具有名称空间。我发现下面的local-name有点复杂。有没有一种方法可以用较简单的表达式来实现?以下示例在Ubuntu Linux上的Python3中。我希望针对特定编程语言或环境的通用解决方案。

$ cat getname.py 
from lxml import etree
tree = etree.parse("data.xml")
root = tree.getroot()
r = tree.xpath("//*[local-name()='term'][@*[local-name()='id' and .='W08003']]")
for i in r: 
    print (i.text)

$ cat data.xml
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ns2:ucReply xmlns:ns1="http://www.uc.se/schemas/ucOrderRequest/" xmlns:ns2="http://www.uc.se/schemas/ucOrderReply/">
      <ns2:status ns2:result="ok"/>
      <ns2:ucReport>
        <ns2:xmlReply>
          <ns2:reports ns2:lang="swe">
            <ns2:report ns2:index="0">
              <ns2:group ns2:name="ID-uppgifter, fysiker" ns2:key="" ns2:index="0" ns2:id="W080">
                <ns2:term ns2:id="W08001">9550908890</ns2:term>
                <ns2:term ns2:id="W08002">8477362551</ns2:term>
                <ns2:term ns2:id="W08003">Medel Svensson</ns2:term>
                <ns2:term ns2:id="W08004">Högvägen 1</ns2:term>
                <ns2:term ns2:id="W08005">45171</ns2:term>
                <ns2:term ns2:id="W08006">Uddevalla</ns2:term>
                <ns2:term ns2:id="W08018">S</ns2:term>
              </ns2:group>
            </ns2:report>
          </ns2:reports>
        </ns2:xmlReply>
      </ns2:ucReport>
    </ns2:ucReply>
  </soap:Body>
</soap:Envelope>
$ python3 getname.py 
Medel Svensson
$ 

0 个答案:

没有答案