无法使用xmlns值解析XML

时间:2017-04-06 13:36:28

标签: c# xml

我收到一个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使用。

我如何获得价值?

2 个答案:

答案 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);