如何在XML命名空间路径中传递通配符(*)?

时间:2017-08-07 19:32:47

标签: python python-2.7 xpath xml-parsing

我在XML文件中有旧的和新的命名空间。当我开始工作时,它只适用于其中一个,但我希望能够处理这两个。

以下是我旧XML的示例:

<element1 xmlns="http:/ss/dd">
  <element2 xmlns="http:/uu/ee/rr">
      <element3>value1</element3>
      <element4>value2</element4>
  </element2>
</element1>  

以下是我的新XML示例:

<element1 xmlns="http:/ss/dd/version1_0">
    <element2 xmlns="http:/uu/ee/rr">
       <element3>value1</element3>
       <element4>value2</element4>
     </element2>
</element1>  

将来它将会是

新XML:

<element1 xmlns="http:/ss/dd/version2_0">
     <element2 xmlns="http:/uu/ee/rr">
        <element3>value1</element3>
        <element4>value2</element4>
     </element2>
</element1>

我的代码是:

ele3 = getvalue(xml_content,'x:element1/y:element2/y:element3',       
                 namespace{x:'http:/ss/dd',y:http:/uu/ee/rr})

我尝试了这个,但它没有工作:

ele3 = getvalue(xml_content,'x:element1/y:element2/y:element3', 
              namespace{x:'http:/ss/dd*',y:'http:/uu/ee/rr'})  
my code is using the default xml parser :

def getvalue(xml_content, x_path, namespace):
     data= etree.formstring(xml_content)
     elements = data.xpath(x_path, namespaces = namespace)
     if(len(elements) ==1):
        value = elements[0].text
        if(value == None):
          value ="Unknown"
        return value
     else:
         return "Unknown"

我的代码适用于旧版本,但我希望它也适用于所有未来版本。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

您是否尝试过传递'*'而不是'http:/ ss / dd *'?

无论如何,对于命名空间使用通配符并不是一个好的做法,如here

所述

那么为什么不获取命名空间值(这个值我的意思是“xmlns =”http:/ ss / dd / version1_0“)并在你的代码中使用它?

Here有一些关于获取命名空间值的信息

希望这有帮助