当元素在XML文件中不存在时,添加null作为值

本文关键字:添加 null 不存在 元素 XML 文件 | 更新日期: 2023-09-27 18:11:50

在c#中,我使用以下代码从XML文件中获取一些元素:

var TestCaseDescriptions = doc.SelectNodes("//testcase/htmlcomment");

这工作得很好,并获得正确的信息,但当我的testcase没有htmlcomment时,它不会在XmlNodeList testcasedescripds中添加任何条目。

当没有htmlcomment时,我想将值"null"作为testcasedescripds的字符串。最后得到XMLNodeList,如

htmlcomment

htmlcomment

htmlcomment

htmlcomment

谁能描述或创建一个如何实现这一目标的示例?

当元素在XML文件中不存在时,添加null作为值

var TestCaseDescriptions = doc.SelectNodes("//testcase/htmlcomment");

当没有htmlcomment时,我希望将值"null"作为testcasedescripds的字符串。

你的问题来自于这样一个事实:如果没有htmlcomment,所选节点的数量将少一个。当前的答案显示了当htmlcomment元素存在时该怎么做,但为空,但我认为你需要这个,如果确实整个htmlcomment元素为空:

var testCases = doc.SelectNodes("//testcase");
foreach (XmlElement element in testCases)
{
    var description = element.SelectSingleNode("child::htmlcomment");
    string results = description == null ? "null" : description.Value;
}​

在上面的代码中,您遍历每个测试用例,并选择测试用例的子节点htmlcomment。如果没有找到,则SelectSingleNode返回null,因此最后一行检查结果并在这种情况下返回"null",否则返回节点的值。

要将此结果更改为节点,必须将该节点创建为当前节点的子节点。您说您想要一个XmlNodeList,所以这可能适合您:

var testCaseDescriptions = doc.SelectNodes("//testcase");
foreach (XmlElement element in testCaseDescriptions)
{
    var comment = element.SelectSingleNode("child::htmlcomment");
    if (comment == null)
    {
        element.AppendChild(
            doc.CreateElement("htmlcomment")
            .AppendChild(doc.CreateTextNode("none")));
    }
}​

在此之后,更新节点集。


注意:显然,OP提到element.SelectSingleNode("child::htmlcomment");不能工作,但element.SelectSingleNode("./htmlcomment");可以工作,尽管从技术上讲,从XPath的角度来看,它们是相等的表达式,并且应该根据微软的文档工作。

试试这个

XmlDocument doc = new XmlDocument();
var TestCaseDescriptions = doc.SelectNodes("//testcase/htmlcomment");
foreach (XmlElement element in TestCaseDescriptions)
{
    string results = element.Value == null ? "" : element.Value;
}​