Linq to XML ... null和缺少元素

时间:2014-01-16 18:14:44

标签: c# xml linq

我有一个XML文件

<Person>
<PersonItem id="0">
    <Time>1/8/2014</Time>
    <Step><![CDATA[Normal]]></Step>
    <HasAddress/>
    <Address/>
</PersonItem>
<PersonItem id="1">
    <Time>1/8/2014 3:21:45 PM</Time>
    <Step><![CDATA[Normal]]></Step>
    <HasAddress/>
    <Address/>
</PersonItem>
<PersonItem id="2">
    <Time>1/8/2014</Time>
    <Step><![CDATA[Normal]]></Step>
    <HasAddress>Main</HasAddress>
    <Address>
        <AddressItem id="0" location=5>
            <Address>15 Oak</Address>
        </AddressItem>
        <AddressItem id="1" location=7>
            <Address>12 Maple</Address>
        </AddressItem>
        <AddressItem id="2" location=8>
            <Address>30 Beech</Picture>
        </AddressItem>
    </Address>
</PersonItem>
</Person>

我想放置检索信息并将其中的一部分发送到数据库。我已经尝试了几种不同的处理方式,我相信我很接近。这是我试过的Linq。

public void DoIt(fileName)
{
    XElement xml = XElement.Load(fileName);

    var items = from item in xml.Elements("PersonItem")
                where (from x in item.Elements("HasAddress")
                       where  x.Element("HasAddress") != null
                       select x).Any()
                select item;

    Array.ForEach(items.ToArray(),
        o=>Console.WriteLine(o.Element("Time").Value));
    Console.ReadLine();
}

问题是什么都没有归还。

3 个答案:

答案 0 :(得分:1)

可能只是一个拼写错误,但在你的xml文件中有这个标签错误。

<Address>30 Beech</Picture>

应该是:

<Address>30 Beech</Address>

答案 1 :(得分:0)

试试这个:

XElement xml = XElement.Load(fileName);
var items = xml.Descendants("PersonItem")
               .Where(x => (string)x.Element("HasAddress") != null)
               .Select(x => x);

答案 2 :(得分:0)

XDocument xml = XDocument.Load("Input.xml");

var items = from item in xml.Root.Elements("PersonItem")
            where !string.IsNullOrEmpty((string)item.Element("HasAddress"))
            select item;

对于您的示例XML文档,仅返回最后一个PersonItem元素。