检查xml是否存在节点c#

时间:2018-06-15 12:20:00

标签: c# xml

我发送了一些请求,有时我得到xml响应

<?xml version="1.0" encoding="UTF-8"?>
<debt-response>
<status>0</status>
<name>ნ.ს.</name>
<schedules>
<schedule>07.07.2017 1171.8000 GEL 1</schedule>
<schedule>07.08.2017 1171.8000 GEL 1</schedule>
<schedule>07.09.2017 1171.8000 GEL 1</schedule>
</schedules>
</debt-response>

有时我会

<?xml version="1.0" encoding="UTF-8"?>
<debt-response>
<status>0</status>
<name>ნ.ბ.</name>
<schedules>
<schedule>06.07.2018 1.5 GEL 1</schedule>
<debt>15.06.2018 0.97</debt>
</schedules>
</debt-response>

我正在使用var acc_numArray = xmlDoc.SelectNodes(“/ debt-response / schedules / debt”);但如果不存在这样的元素,那就是异常。 如果这样的节点存在任何解决方案,我想得到那笔债务?

2 个答案:

答案 0 :(得分:0)

你可以尝试

var debt = XDocument.Load("path to your xml").Descendants("debt").First()?.Value;

获取第一个debt元素并返回其值。

如果您有多个债务,以下代码会将元素值保存在列表中:

var debt = XDocument.Load("path to your xml").Descendants("debt").Select(d => d.Value).ToList();

如果您正在从流中读取xml,请使用XDocument.Parse("your string")代替Load()

注意:您需要System.Xml.Linq命名空间。

答案 1 :(得分:0)

如果没有看到您的代码,我只能猜测您正在做什么 - 但有一件事是肯定的,如果指定的XPath无法找到任何节点,则此行将抛出异常:

var acc_numArray = xmlDoc.SelectNodes("/debt-response/schedules/debt");

相反,它会返回XmlNodeList,其中count为零。

我假设您尝试访问节点列表时发生异常,就好像它有项目一样 - 但只需检查计数,只有在非零时才访问它:

var acc_numArray = xmlDocument.SelectNodes("/debt-response/schedules/debt");

if (acc_numArray.Count > 0)
{
    // Do stuff here
}

如果您将实际代码的示例放入问题中,那么帮助您将会容易得多。