本文介绍了XmlDocument.SelectSingleNode()&amp;名称空间 - 不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 嗨; 如果没有命名空间,这对我来说很好。但是如果xml有命名空间,那么我得到的节点都没有或者是异常。 这里是示例xml: < root xmlns =" http://www.test.org" xmlns:sns =" http://www.test.org/sub" xmlns:mns =" http://www.test.org/mini"> < data> < items> < item id =" 1"> < sns:subItem sid =" 11"> dave< / sns:subItem> < sns:subItem sid =" 12"> thielen< / sns:subItem> < / item> < item id =" 2"> < sns:subItem sid =" 21"> shirley< / sns:subItem> < / item> < / items> < mns:more> dave thielen< / mns:more> < / data> < / root> 1.如果我选择SelectSingleNode(" / root / data / items / item / @ id") - 我没有节点 返回。如果我创建一个XmlNamespaceManager就是这种情况。 2.如果我选择SelectSingleNode(" / root / data / items / item / sns:subItem / @sid") 我有一个命名空间限定节点我得到: 2a。如果没有XmlNamespaceManager,我会得到一个例外。 2b。如果我添加以下代码: XmlNamespaceManager context = new XmlNamespaceManager(doc.NameTable); context.AddNamespace(" sns"," http:// www .test.org / sub"); node = doc.SelectSingleNode((" / root / data / items / item / sns:subItem / @ sid", context); 然后我没有返回任何节点(但至少没有抛出异常)。 我测试了XmlSpy和xpath中的所有内容按预期工作。 那么发生了什么? 首先,即使我添加命名空间,我仍然可以''得到任何节点 返回。具有名称空间的那些和没有评估到没有节点的那些。 其次,如果我不这样做,它为什么会抛出异常不创建命名空间 manager?命名空间存在于xml文件中,根据定义,应该使用那些 映射。另外,引用来自 http://msdn.microsoft.com/library/de...edprefixes.asp "如果没有将msbooks命名空间添加到XmlNamespaceManager,并且如果它不是不在文档的名称表中,则抛出异常。所以 应该没有为 文件中定义的命名空间抛出异常。 求助 - 请不要感觉对我来说。 - 谢谢 - 戴夫Hi;If there are no namespaces this works fine for me. But if the xml hasnamespaces, then I get either no node back or an exception.Here is the sample xml:<root xmlns="http://www.test.org"xmlns:sns="http://www.test.org/sub"xmlns:mns="http://www.test.org/mini"><data><items><item id="1"><sns:subItem sid="11">dave</sns:subItem><sns:subItem sid="12">thielen</sns:subItem></item><item id="2"><sns:subItem sid="21">shirley</sns:subItem></item></items><mns:more>dave thielen</mns:more></data></root>1. If I do SelectSingleNode("/root/data/items/item/@id") - I get no nodesreturned. This is the case if I create an XmlNamespaceManager or not.2. If I do SelectSingleNode("/root/data/items/item/sns:subItem/@sid") whereI have a namespace qualified node I get:2a. If there is no XmlNamespaceManager I get an exception.2b. If I add the following code:XmlNamespaceManager context = new XmlNamespaceManager(doc.NameTable);context.AddNamespace("sns", "http://www.test.org/sub");node = doc.SelectSingleNode(("/root/data/items/item/sns:subItem/@sid",context);Then I get no nodes returned (but at least no exception is thrown).I tested all of the in XmlSpy and the xpath works there as expected.So what is going on?First off, even if I add the namespaces, I still can''t get any nodereturned. Both those with namespaces and those without evaluate to no nodes.Second, why does it throw an exception if I don''t create a namespacemanager? The namespaces exist in the xml file and by definition, thosemappings should be used. Also, to quote from http://msdn.microsoft.com/library/de...edprefixes.asp"If the msbooks namespace was not added to the XmlNamespaceManager, and if itis not in the name table of the document, then an exception is thrown." Sothere should be no exception thrown for namespaces that are defined in thedocument.Help please - this makes no sense to me.--thanks - dave推荐答案 这篇关于XmlDocument.SelectSingleNode()&amp;名称空间 - 不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
08-21 06:37