6
为什么XmlNamespaceManager是必需的?
我干了为什么-至少在.Net Framework中-在执行XPath查询时必须使用XmlNamespaceManager来处理名称空间(或笨拙而冗长的[local-name()=...XPath谓词/函数/其他) 。我不明白为什么命名空间是必要的,或者至少是有益的,但为什么会这样复杂? 为了查询一个简单的XML文档(没有名称空间)... <?xml version="1.0" encoding="ISO-8859-1"?> <rootNode> <nodeName>Some Text Here</nodeName> </rootNode> ...一个人可以使用类似doc.SelectSingleNode("//nodeName")(可以匹配<nodeName>Some Text Here</nodeName>) 谜题1:我的第一个烦恼-如果我理解正确的话-仅仅是将名称空间引用添加到父/根标签(无论是否用作子节点标签的一部分),如下所示: <?xml version="1.0" encoding="ISO-8859-1"?> <rootNode xmlns="http://example.com/xmlns/foo"> <nodeName>Some Text Here</nodeName> </rootNode> ...需要多几行代码才能获得相同的结果: Dim nsmgr As New XmlNamespaceManager(doc.NameTable) nsmgr.AddNamespace("ab", "http://example.com/xmlns/foo") Dim desiredNode As XmlNode = doc.SelectSingleNode("//ab:nodeName", nsmgr) ...实质上是在梦见一个不存在的前缀(“ ab”),以查找甚至不使用前缀的节点。这有什么意义?(在概念上)有doc.SelectSingleNode("//nodeName")什么问题? 谜题2:假设您有一个使用前缀的XML文档: <?xml version="1.0" encoding="ISO-8859-1"?> <rootNode xmlns:cde="http://example.com/xmlns/foo" xmlns:feg="http://example.com/xmlns/bar"> <cde:nodeName>Some …