XPath简单问题:为什么只有local-name()可以??
假如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
相关问题
- 一个XPath的简单问题,急!!
- XSL和XPath的简单问题
- 如何简单得到datatable的field name?
- 简单题:unsigned short name[32+1]————>name:array [0..33] of word,对吗?
- 哪位大侠帮忙解决XPath和命名空间的问题啊,应该是简单的,但是困扰了一天了。在线等。。。
- 哪位大侠帮忙用.net解决XPath和命名空间的问题啊,应该是简单的,但是困扰了一天了。在线等。。。
- <% For Each name In Request.ServerVariables %> 的问题?应该挺简单的
- 简单问题:JSP中使用<%@ include file="file_name" %>出错
- 问一个简单的ID 和name区别的问题!
- 简单!