我是 C# 新手,刚开始使用 XmlElement 及其 SelectSingleNode 方法。在我的 XML 文件中,有一个标签可能有值(即 <tag>value</tag>
)或为空(即 <tag></tag>
)。如果它为空,则 SelectSingleNode 返回 null。
我目前正在使用以下代码来捕获标签的值:
XmlElement elem = ....
string s = elem.SelectSingleNode("somepath").Value;
这段代码显然会引发空标签的异常。但是,对我来说,空标签是一个有效值,我希望我的字符串的值为“”。
用 try...catch 包装对 SelectSingleNode 的每次调用似乎是一种代码的巨大浪费(我有很多字段可能是空的),我相信有更好的方法来实现这一点。
推荐的方法是什么?
编辑:
根据请求,示例 XML 代码将是:
<Elements>
<Element>
<Name>Value</Name>
<Type>Value</Type> <-- may be empty
<Color>Value</Color>
</Element>
<Element>
<Name>Value</Name>
<Type>Value</Type>
<Color>Value</Color>
</Element>
</Elements>
CS代码:
XmlDocument doc = new XmlDocument();
doc.Load("name.xml");
foreach (XmlElement elem in doc.SelectNodes("Elements/Element"))
{
myvalue = elem.SelectSingleNode("Type/text()").Value;
}
最佳答案
您的示例代码:
myvalue = elem.SelectSingleNode("Type/text()").Value;
就是问题所在。您在那里使用的 XPath 表达式并不意味着“给我元素 Type
的文本”。它的意思是“给我元素类型的所有子文本节点”。并且空元素没有任何子文本节点(XPath 文档模型中的文本节点不能为空)。如果你想获取节点的文本值,你应该使用:
myvalue = elem.SelectSingleNode("Type").InnerText;
关于C# XmlElement : SelectSingleNode returns null for empty string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1173177/