在C#中我使用以下方法从XML文件中获取一些元素:
var TestCaseDescriptions = doc.SelectNodes("//testcase/htmlcomment");
这样可以正常工作并获取正确的信息但是当我的测试用例没有htmlcomment时,它不会在XmlNodeList TestCaseDescriptions中添加任何条目。
如果没有htmlcomment,我希望得到值" null"作为TestCaseDescriptions的字符串。所以最后我会有一个类似
的XMLNodeListhtmlcomment
htmlcomment
空
htmlcomment
htmlcomment
任何人都可以描述或创建一个如何实现这一目标的示例吗?
答案 0 :(得分:1)
var TestCaseDescriptions = doc.SelectNodes("//testcase/htmlcomment");
如果没有htmlcomment,我希望得到值" null"作为TestCaseDescriptions的字符串。
您的问题来自于如果没有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中的相同表达式,并且应该根据微软的文档工作。
答案 1 :(得分:0)
试试这个
XmlDocument doc = new XmlDocument();
var TestCaseDescriptions = doc.SelectNodes("//testcase/htmlcomment");
foreach (XmlElement element in TestCaseDescriptions)
{
string results = element.Value == null ? "" : element.Value;
}