使用 XElement 的方法 Elements(XName) 的 Linq To Xml 问题

2023-12-04

我在使用 Linq To Xml 时遇到问题。

一个简单的代码。我有这个 XML:

<?xml version="1.0" encoding="utf-8" ?>
<data xmlns="http://www.example.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/directory file.xsd">
<contact>
 <name>aaa</name>
 <email>[email protected]</email>
 <birthdate>2002-09-22</birthdate>
 <telephone>000:000000</telephone>
 <description>Description for this contact</description>
</contact>
<contact>
 <name>sss</name>
 <email>[email protected]</email>
 <birthdate>2002-09-22</birthdate>
 <telephone>000:000000</telephone>
 <description>Description for this contact</description>
</contact>
<contact>
 <name>bbb</name>
 <email>[email protected]</email>
 <birthdate>2002-09-22</birthdate>
 <telephone>000:000000</telephone>
 <description>Description for this contact</description>
</contact>
<contact>
 <name>ccc</name>
 <email>[email protected]</email>
 <birthdate>2002-09-22</birthdate>
 <telephone>000:000000</telephone>
 <description>Description for this contact</description>
</contact>

我想让每个联系人将其映射到对象联系人上。为此,我使用以下代码片段:

XDocument XDoc = XDocument.Load(System.Web.HttpRuntime.AppDomainAppPath + this.filesource);
XElement XRoot = XDoc.Root;
//XElement XEl = XElement.Load(this.filesource);
var results = from e in XRoot.Elements("contact") 
 select new Contact((string)e.Element("name"), (string)e.Element("email"), "1-1-1", null, null);
List<Contact> cntcts = new List<Contact>();
foreach (Contact cntct in results) {
 cntcts.Add(cntct);
}
Contact[] c = cntcts.ToArray();
// Encapsulating element
Elements<Contact> final = new Elements<Contact>(c);

好吧,不要介意这一切:专注于这一点:

当我得到根节点时,就没事了,我得到了正确的结果。

当我使用 select 指令时,我尝试让每个节点都说: from e in

XRoot.Elements("contact")

好的,问题是:如果我使用: from e in XRoot.Elements() 我会得到所有联系人节点,但如果我使用: from e in XRoot.Elements("contact") 我什么也得不到:空集。

好吧,你告诉我:使用另一个:好吧,我这样做,让我们使用:from e in XRoot.Elements(),无论如何我都得到了所有节点,这是对的,但是另一个问题来了: 当说:select new Contact((string)e.Element("name"), (string)e.Element("email"), "1-1-1", null, null);我尝试访问<name>, <email>...我必须使用 .Element("name") 但它也不起作用!!!!!!!!!这到底是什么????????????看来我和我传递的名字不符,但这怎么可能。我知道 Elements() 函数采用重载的一个参数,该参数是映射到字符串的 XName。请考虑我编写的代码来自一个示例,它应该可以工作。


很简单:有一个 XML 命名空间在起作用,但您忽略了它:

<data xmlns="http://www.example.com"  
      **************************

您需要将其添加到您的 Linq-to-XML 查询中!

就像是:

XNamespace ns = "http://www.example.com";

and then

XRoot.Elements(ns + "contact") 

当然,在访问子元素时也可以使用 XML 命名空间:

var results = from e in XRoot.Elements("contact") 
              select new Contact(e.Element(ns + "name").Value, 
                                 e.Element(ns + "email").Value, 
                                 "1-1-1", null, null);

那应该有帮助。请参阅 MSDN 文档使用 XML 命名空间更多细节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 XElement 的方法 Elements(XName) 的 Linq To Xml 问题 的相关文章

随机推荐