XDocument.Descendants()返回NullReferenceException:对象引用未设置为对象的实例

时间:2014-10-02 13:00:46

标签: c# xml linq-to-xml

我在XML文件中检索一些数据时遇到了一些困难。 这就是我的XML:

<?xml version="1.0" encoding="windows-1252"?>
<hexML version="0.9">
<head>
<title><![CDATA[Title ]]></title>
<description/>
<ftm date="2014-09-24T16:34:37 CET"/>
</head>
<body>
    <press_releases>
        <press_release id="1796257" language="fr" type="5">
            <published date="2014-06-19T11:55:09 CET"/>
            <categories>
            <category id="75" label="French" keywords="language"/>
            </categories>
            <headline><![CDATA[Test Release for Website 3]]></headline>
            <main><![CDATA[TEXT XML DETAILLE]]></main>
            <footer><![CDATA[]]></footer>
            <files>
                <file id="618383" format="pdf" type="Regular Attachment">
                <file_headline><![CDATA[Test Attachment]]></file_headline>
                <location><![CDATA[http://test.html1796257/618383.pdf]]></location>
                </file>
            </files>
            <location href="/S/151406/1796257.xml"/>
        </press_release>
    </press_releases>
</body>
</hexML>

我尝试获取此数据:http://test.html1796257/618383.pdf(在“files”标签中)

这是我到目前为止所尝试的:

            string Linkpdf = (from c in DetailXml.Descendants("files")                                  
                             select c.Element("location").Value).Single();

这让我回到上面提到的例外情况。 谢谢你的帮助

1 个答案:

答案 0 :(得分:2)

如果XML缩进正确:

<files>
    <file id="618383" format="pdf" type="Regular Attachment">
        <file_headline><![CDATA[Test Attachment]]></file_headline>
        <location><![CDATA[http://test.html1796257/618383.pdf]]></location>
    </file>
</files>

您将能够清楚地看到<location><file><files>元素的直接孩子:

string Linkpdf = (from c in DetailXml.Descendants("files")
                  select c.Element("file").Element("location").Value).Single();