我有一个获取根元素节点的代码:
xmlNodes = rootElement.SelectNodes("DefinitionName");
它没有返回存在的节点。在调试器中,我可以展开rootElement查找DefinitionName。显然问题在于文件定义了命名空间(请参见下面的XML)。MSDN说我必须像这样做才能获取节点返回:
注意:这与我的代码无关。这是来自MSDN的示例:
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com");
XmlNodeList nodelist = doc.SelectNodes("//ab:book", nsmgr);
我有两个问题:
- 为什么命名空间很重要?如果我想要一个节点,而它存在,那就直接给我。
- 我的应用程序处理许多XML文件。我该如何指定命名空间(
nsmgr.AddNamespace()
)?我需要先解析文件才能获取吗?
我感觉自己正在走一条漫长、充满焦虑的路。
这是XML:
<?xml version="1.0" encoding="utf-8"?>
<SessionStateInfo xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
z:Id="1" z:Type="Company.Apps.MoreHere.Session.SessionStateInfo"
z:Assembly="assembly info here"
xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"
xmlns="http://schemas.datacontract.org/2004/07/MoreHere.Session">
<CoaterNumber>25</CoaterNumber>
<DefinitionName z:Id="2">Two Line</DefinitionName>
<EnableManualMode>true</EnableManualMode>
xmlns =“…”
),这会改变很多事情... - Ian Roberts