假如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还是不行,请达人指教。
<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还是不行,请达人指教。
解决方案 »
- 什么是里氏替换原则呢?
- C#打包2个exe
- 如何使窗体里的控件放大,缩小?
- Remoting 繼承於BindingList<T>類的Serializable問題
- 数据库上传下载文件出现的很奇怪的问题,很急,在线等!
- 请教WebBrowser不能嵌套插入表格的问题
- 刚学C#,有些概念知道,但还不太懂,高分支持。
- 在C#如何检测某IP的某端口是否打开(类似于TELNET)?
- 关于BerkeleyDB在C#中的异常问题
- WinForm 为何会在无任何错误提示的情况下自动关闭
- 在SQL2005中附加SQL2000中的数据库时,关系图导不进!总是提示数据库所有者出出问题!请高人帮忙!!
- VS2005 Team Suite中源码控制问题
但是用:XmlNode node=doc.SelectSingleNode(@"/*[local-name()='root']/*[local-name()='name']");却反尔取得到值??
少了一个“]”括号。
所以你这个问题就很好解决了如果你用默认namespace在前面也是能够匹配的
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);
但是还有一个疑问:在有默认命名空间的情况下也不可以吗??非要NM:XXX这样有前缀才行?
我只有一个默认命名空间,为什么还一定要加前缀,有没有方法不用加?
如果说默认命名空间可以省略,那么没有命名空间的情况就和她是一样的了。
你可以测试一下,把那个xmlns="..."去掉,你原来的代码就可以了。