C# 无法分析具有xmlns值的XML
我收到一个XML文件,该文件在根节点上分配了一个xmlns命名空间: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 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);