我收到一个XML文件,该文件在根节点上分配了一个xmlns名称空间:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Message xmlns="http://www.myAddress.com/DataRequest/message/">
<Date>2017/01/01</Date>
</Message>
我不知道如何使用XPath检索Date元素,我试过
var root = xDocument.Root;
var dateElement = root.XPathSelectElement("/Message/Date");
如果我从root xml中删除命名空间,那么我可以使用&#34; / Message / Date&#34;来检索该值。
我尝试将xmlns添加到XmlNamespaceManager,但是我收到此错误:
前缀&#34; xmlns&#34;保留供XML使用。
我如何获得价值?
答案 0 :(得分:7)
指定元素名称时应使用命名空间。使用XElement.GetDefaultNamespace()
方法很容易获得默认命名空间:
var ns = root.GetDefaultNamespace();
var dateElement = (DateTime)root.Element(ns + "Date");
如果你想使用XPath:
XmlNamespaceManager manager = new XmlNamespaceManager(new NameTable());
manager.AddNamespace("ns", root.GetDefaultNamespace().ToString());
var dateElement = (DateTime)root.XPathSelectElement("/ns:Message/ns:Date", manager);
答案 1 :(得分:0)
我建议使用LINQ。
以下是代码示例的链接:https://msdn.microsoft.com/en-us/library/mt693115.aspx
这是代码:
XElement root = XElement.Load("Message.xml");
IEnumerable<XElement> dateNode=
from el in root.Elements("Date")
select el;
foreach (XElement el in dateNode)
Console.WriteLine(el);