Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法分析具有xmlns值的XML_C#_Xml - Fatal编程技术网

C# 无法分析具有xmlns值的XML

C# 无法分析具有xmlns值的XML,c#,xml,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> 如果从根xml中删除名称空间,则可以使用“/Mes

我收到一个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>  
如果从根xml中删除名称空间,则可以使用“/Message/Date”检索该值

我试图将xmlns添加到XmlNamespaceManager,但出现以下错误:

前缀“xmlns”保留供XML使用


如何获取该值?

在指定元素名称时,应该使用名称空间。使用方法很容易获得默认命名空间:

如果要使用XPath:

XmlNamespaceManager manager = new XmlNamespaceManager(new NameTable());
manager.AddNamespace("ns", root.GetDefaultNamespace().ToString());
var dateElement = (DateTime)root.XPathSelectElement("/ns:Message/ns:Date", manager);

我建议使用LINQ

以下是代码示例的链接:

代码如下:

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);  
XElement root=XElement.Load(“Message.xml”);
IEnumerable日期节点=
从根元素中的el(“日期”)
选择el;
foreach(日期节点中的XElement el)
控制台写入线(el);

我不工作,我不明白为什么它应该工作。XML文件中没有使用我添加到XmlNamespaceManager的名称空间前缀定义的节点。@Angela它可以工作,我不明白为什么它不能工作。你试过运行这个代码吗?我刚刚在LinqPad中试过,可以确认Sergey的两个建议都有效。你仍然需要注意名称空间。因此,添加var ns=root.GetDefaultNamespace();从root.Elements(ns+“Date”)中的el来看,这是一个重复的问题@货盘到期已收,可重复
XmlNamespaceManager manager = new XmlNamespaceManager(new NameTable());
manager.AddNamespace("ns", root.GetDefaultNamespace().ToString());
var dateElement = (DateTime)root.XPathSelectElement("/ns:Message/ns:Date", manager);
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);