无法从收到的 XML 文件中获取列表
Posted
技术标签:
【中文标题】无法从收到的 XML 文件中获取列表【英文标题】:Cant get list from received XML file 【发布时间】:2013-08-14 18:47:27 【问题描述】:这是我收到的 xml:
<?xml version="1.0" encoding="UTF-8"?>
<mdpr:Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mdpr="http://...">
<mdpr:contactList>
<mdpr:contact ID="123456" classID="Customer">
<mdpr:Name>data1</mdpr:Name>
<mdpr:TransportCode>data2</mdpr:TransportCode>
<mdpr:ZipCode>data3</mdpr:ZipCode>
<mdpr:City>data4</mdpr:City>
</mdpr:contact>
<mdpr:contact ID="234567" classID="Customer">
<mdpr:Name>data5</mdpr:Name>
<mdpr:TransportCode>data6</mdpr:TransportCode>
<mdpr:ZipCode>data7</mdpr:ZipCode>
<mdpr:City>data8</mdpr:City>
</mdpr:contact>
</mdpr:contactList>
...
这是我尝试获取所有联系人的方法:
public class Contact
public string Name get; set;
public string TransportCode get; set;
...
XDocument xdoc = XDocument.Load(doc.CreateNavigator().ReadSubtree());
List<Contact> contacts = (from xml in xdoc.Elements("contactList").Elements("contact")
select new Contact
Name = xml.Element("Name").Value,
TransportCode = xml.Element("TransportCode").Value
).ToList();
但我什么也得不到。我在这里做错了什么?
【问题讨论】:
您的文档真的使用http://...
作为 mdpr 命名空间吗? (问题在于您的命名空间处理。)
【参考方案1】:
您的 xml 中声明了 mdpr
命名空间:
xmlns:mdpr="http://..."
但您只提供查询中元素的本地名称。例如。您提供contactList
名称,但元素的全名是mdpr:contactList
。所以什么也没找到。
您应该为您的命名空间定义XNamespace
并使用它来创建元素的全名:
XNamespace mdpr = "http://...";
var contacts = from c in xdoc.Root.Element(mdpr + "contactList")
.Elements(mdpr + "contact")
select new Contact
TransportCode = (string)c.Element(mdpr + "TransportCode"),
Name = (string)c.Element(mdpr + "Name")
;
另外contactList
不是文档的根。您应该在Root
下搜索它。
【讨论】:
【参考方案2】:XDocument xdoc = XDocument.Load(doc.CreateNavigator().ReadSubtree());
var ns = xdoc.Root.Name.Namespace;
List<Contact> contacts = (from xml in xdoc.Root.Elements(ns +"contactList").Elements(ns +"contact")
select new Contact
Name = xml.Element(ns +"Name").Value,
TransportCode = xml.Element(ns +"TransportCode").Value
).ToList();
【讨论】:
【参考方案3】:尝试指定命名空间
string nmsp = "http://www.w3.org/2001/XMLSchema-instance/"
from xml in xdoc.Elements(nmsp+"contactList").Elements(nmsp + "contact")
【讨论】:
以上是关于无法从收到的 XML 文件中获取列表的主要内容,如果未能解决你的问题,请参考以下文章