Jay*_*Jay 5 c# xml xml-namespaces
以下代码完美无缺.请参阅下面的XML文件.
XPathDocument xPathDoc = new XPathDocument(@"C:\Authors.xml");
XPathNavigator navigator = xPathDoc.CreateNavigator();
XPathNodeIterator iterator = navigator.Select("/Contacts/Author/FirstName");
iterator.MoveNext();
string firstName = iterator.Current.InnerXml;
Console.WriteLine(firstName);
Run Code Online (Sandbox Code Playgroud)
'firstName'的值返回'Joe',这是完美的.但是,当我将这个attibute xmlns ="http://www.w3.org/1999/xhtml"添加到''标签时,它看起来如下:
<Author xmlns="http://www.w3.org/1999/xhtml">
Run Code Online (Sandbox Code Playgroud)
然后代码没有返回正确的值('Joe')为什么然后属性xmlns ="http://www.w3.org/1999/xhtml"影响上面的代码以及我缺少什么来返回正确的值?
任何帮助将不胜感激.
这是xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<Contacts>
<Author>
<FirstName>Joe</FirstName>
</Author>
<Teacher>
<FirstName>Larry</FirstName>
</Teacher>
<Painter>
<FirstName>Mary</FirstName>
</Painter>
</Contacts>
Run Code Online (Sandbox Code Playgroud)
xmlns是名称空间,用于避免xml标记之间的冲突.场景,当一个应用程序使用来自多个源的xml且两个或多个xml文件中存在相同的标记名时.由于这种歧义的可能性很高,因此使用命名空间来减少它.
您的XPath表达式正在查找没有名称空间的元素"Contacts","Author"和"FirstName" .它看起来像Author元素(和没有命名空间声明子元素)都具有命名空间,做你的XPath表达式不匹配.
要修复它,您需要使用an XmlNamespaceManager,将前缀与命名空间相关联,并在XPath表达式中包含该命名空间.坦率地说,它变得混乱.
你有什么理由不能使用LINQ to XML吗?它使得处理XML以及特别是名称空间变得更加简单.如果您能够使用它,我很高兴能够提供LINQ to XML示例.
编辑:这是LINQ to XML的一些示例:
XDocument doc = XDocument.Load("authors.xml");
XNamespace ns = "http://www.w3.org/1999/xhtml";
var query = doc.Root
.Elements(ns + "Author")
.Elements(ns + "FirstName");
foreach (var element in query)
{
Console.WriteLine((string) element);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1625 次 |
| 最近记录: |