当前位置:  开发笔记 > Android > 正文

如何从带名称空间的XML中"选择"?

如何解决《如何从带名称空间的XML中"选择"?》经验,为你挑选了3个好方法。

我有一个类似:::的XML文档




  
    
        
          Submitted By
        
      
        
          Value1-0
        
      

问题是尝试选择Rows时

  
    
  

它不匹配.我删除了所有的名称间距,它工作正常.那么,如何让'select'匹配Row?



1> ckarras..:

在XSLT中声明名称空间的名称空间前缀,然后select使用该前缀:


  ...   
  
    ...
  
  ...

这通常会导致XPath易于阅读.但是,XSLT/XPath工具生成以下等效代码:


   ...


后者似乎更简洁.谢谢.

2> Tomalak..:

如果您不关心命名空间,可以使用XPath`local-name()'函数:


  

或者,同样的事情可以这样表达.我不确定这是否是标准XPath,如果所有XPath实现都支持它(ColdFusion确实如此,那么Java也可以这样做).也许有人知道这是否符合任何标准.


  



3> ChuckB..:

Tomalek和ckarras提供了很好的答案,但我想澄清其背后的原因.

您不匹配的元素位于文档中它们出现的作用域的默认名称空间中,也就是说,它们位于为该作用域声明的名称空间中,而没有前缀(例如

xmlns="urn:schemas-microsoft-com:office:spreadsheet"

Workbook元素上).即使标记名缺少名称空间前缀,它们也位于名称空间中.

但是,XPath要求命名空间中的所有元素名称都使用前缀限定,或者namespace-uri()在谓词中显式指定名称空间.因此,您必须使用local-name()谓词中的函数来匹配元素名称(namespace-uri()如果在命名空间中存在名称冲突的危险,也必须使用该函数),或者您必须声明要在XPath中匹配元素的每个名称空间使用前缀,并在XPath表达式中使用其名称空间前缀限定元素名称.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有