XPath简单问题:为什么只有localname()可以??

XPath简单问题:为什么只有local-name()可以??

楼主topken(topken)2005-11-10 23:25:01 在 .NET技术 / C# 提问

假如test.xml如下:  
  <root   xmlns="http://www.xyz.zyx.com">  
          <description>something   here</description>  
          <name>oneBody</name>  
  </root>  
  为什么我用:  
    XmlDocument   doc   =   new   XmlDocument();  
  doc.Load("test.xml");  
  XmlNode   node=doc.SelectSingleNode(@"/root/name");   //根本取不到值,为Null  
  但是用:XmlNode   node=doc.SelectSingleNode(@"/*[local-name()='root']/*[local-name()='name'");却反尔取得到值??  
  我试了加XmlNamespaceManger还是不行,请达人指教。  
  问题点数:100、回复次数:7Top

1 楼topken(topken)回复于 2005-11-10 23:27:40 得分 0

纠正:  
  但是用:XmlNode   node=doc.SelectSingleNode(@"/*[local-name()='root']/*[local-name()='name']");却反尔取得到值??  
  少了一个“]”括号。  
  Top

2 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-11-10 23:32:19 得分 50

LocalName的意思就是不包含namespace前缀的,所以你能够正确匹配值!  
   
  我们知道任何变量都有需要唯一标示,也就是用namespace+localname,我们得到这个变量的时侯也应该用这样的qualtifiedName来得到他  
  所以你这个问题就很好解决了  
   
  如果你用默认namespace在前面也是能够匹配的Top

3 楼Sunmast(速马@Redmond, WA)回复于 2005-11-10 23:48:47 得分 40

try:  
   
  XmlDocument   xmldoc   =   new   XmlDocument();  
  xmldoc.Load("test.xml");  
  XmlNamespaceManager   nm   =   new   XmlNamespaceManager(xmldoc.NameTable);  
  nm.AddNamespace("NM",   "http://www.xyz.zyx.com");  
  XmlNode   node   =   xmldoc.SelectSingleNode("/NM:root/NM:name",   nm);  
  Console.WriteLine(node.InnerXml);Top

4 楼topken(topken)回复于 2005-11-11 09:00:09 得分 0

谢谢了!!现在了解了,测试通过了。  
  但是还有一个疑问:在有默认命名空间的情况下也不可以吗??非要NM:XXX这样有前缀才行?  
  我只有一个默认命名空间,为什么还一定要加前缀,有没有方法不用加?Top

5 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-11-11 09:03:10 得分 0

因为还有一种情况是没有命名空间啊。  
  如果说默认命名空间可以省略,那么没有命名空间的情况就和她是一样的了。  
  你可以测试一下,把那个xmlns="..."去掉,你原来的代码就可以了。Top

6 楼ILoveRMB(我爱人民币)回复于 2005-11-11 09:03:58 得分 10

有名称空间就需要   有前缀的。  
  Top

7 楼topken(topken)回复于 2005-11-13 18:36:39 得分 0

不好意思,没及时结贴,  
  谢各位友情相助!!Top

相关问题

原文地址:https://www.cnblogs.com/cxd4321/p/903896.html