当前位置: 首页 > 编程语言 > C#

为什么'xmlns'属性会影响XPath节点查找?分享

时间:2023-04-10 14:23:33 C#

为什么'xmlns'属性会影响XPath节点查找?以下代码完美运行。请参阅下面的XML文件。XPathDocumentxPathDoc=newXPathDocument(@"C:Authors.xml");XPathNavigator导航器=xPathDoc.CreateNavigator();XPathNodeIteratoriterator=navigator.Select("/Contacts/Author/FirstName");迭代器.MoveNext();stringfirstName=iterator.Current.InnerXml;Console.WriteLine(firstName);'firstName'的值返回'Joe',这是完美的。但是当我将这个attibutexmlns="http://www.w3.org/1999/xhtml"添加到"标签时,它看起来像这样:那么代码没有返回正确的值('Joe')为什么那么属性是否xmlns="http://www.w3.org/1999/xhtml"影响上面的代码,我缺少什么来返回正确的值?任何帮助将不胜感激。这是xml文件:JoeLarryMaryxmlns是命名空间,用于避免xml标签之间的冲突。场景,当应用程序使用来自多个来源的xml并且两个或多个xml文件中存在相同的标签名称。由于这种歧义的可能性很高,所以使用命名空间来减少它。您的XPath表达式正在寻找没有命名空间的元素“Contacts”、“Author”和“FirstName”。看起来Author元素(以及任何没有命名空间声明的后代元素)有命名空间,您的XPath表达式没有tmatch。要修复它,您需要使用XmlNamespaceManager,将前缀与命名空间相关联,并将该命名空间包含在您的XPath表达式中。坦率地说,它变得令人困惑。有什么理由不能使用LINQtoXML?它使使用XML,尤其是命名空间变得更加容易。如果您能够使用它,我很乐意提供一个LINQtoXML示例。编辑:以下是LINQtoXML的一些示例:以上是C#学习教程:Whydoesthe'xmlns'attributeaffectsXPathnodelookup?如果分享的内容对你有用,需要了解更多C#学习教程,希望大家多多关注——XDocumentdoc=XDocument.Load("authors.xml");XNamespacens="http://www.w3.org/1999/xhtml";varquery=doc.Root.Elements(ns+"Author").Elements(ns+"FirstName");foreach(查询中的var元素){Console.WriteLine((string)element);}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: