0

我有以下 XML 文件:

<Invoice_Ack>
    <Invoices>
        <Invoice>
            <Invoice_Number>123456</Invoice_Number>
            <Status>Rejected</Status>
            <Detail_Errors>
                <Detail_Error>
                    <ErrorID>0001</ErrorID>
                    <ErrorMessage>This is the error message</ErrorMessage>
                </Detail_Error>
                <Detail_Error>
                    <ErrorID>0502</ErrorID>
                    <ErrorMessage>This is another error message</ErrorMessage>
                </Detail_Error>
            </Detail_Errors>
        </Invoice>
    </Invoices>
</Invoice_Ack>

我可以使用以下代码访问“Invoice_Number”和“Status”节点,但我不确定如何获取“ErrorMessage”节点。这是我所拥有的:

XDocument doc = XDocument.Load(file);

foreach(var invoice in doc.Descendants("Invoice"))
{
    string status = invoice.Element("Status").Value;
    string invoicenum = invoice.Element("Invoice_Number").Value;
}

但是我如何获得错误消息?我试过

string error = invoice.Element("Detail_Errors").Element("Detail_Error").Element("ErrorMessage").Value;

但这给了我“对象引用未设置为对象的实例”错误。

这还能怎么做?谢谢!!

4

1 回答 1

1

您提供的代码适用于您提供的 XML。我怀疑你实际上有一张没有任何错误的发票——这就是问题所在。

您应该遍历错误:

foreach (var error in invoice.Elements("Detail_Errors").Elements("Detail_Error"))
{
    var id = error.Element("ErrorID").Value;
    var message = error.Element("ErrorMessage").Value;
    // Do whatever you want with the ID and message
}

注意Elements("Detail_Errors")这里的使用 - 如果总是只有一个Detail_Errors元素(可能没有子元素),你可以使用Element("Detail_Errors"),但即使没有 Detail_Errors元素,我给出的代码也可以工作。

于 2013-01-15T20:34:18.697 回答