【问题标题】:How to pass wildcard (*) in XML namespace path?如何在 XML 命名空间路径中传递通配符 (*)?
【发布时间】:2018-01-15 04:53:41
【问题描述】:

我在 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"

我的代码适用于旧版本,但我想让它也适用于所有未来版本。我该怎么做?

【问题讨论】:

  • 这与 XSLT 有什么关系?请显示更完整的代码而不是行 sn-ps,包括 import 行。
  • 我找到了解决这个问题的方法,感谢您帮助我......

标签: python python-2.7 xpath xml-parsing


【解决方案1】:

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

无论如何,正如here 所解释的那样,对命名空间使用通配符并不是一个好习惯

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

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

希望对你有帮助

【讨论】:

  • 感谢卡洛斯分享信息。我知道该怎么做
猜你喜欢
  • 2017-04-29
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
  • 2023-03-06
  • 1970-01-01
  • 2016-12-19
相关资源
最近更新 更多