当元素在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
谁能描述或创建一个如何实现这一目标的示例?
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;
}