C# XmlElement : SelectSingleNode returns null for empty string?

标签 c# xml

我是 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/

相关文章:

c# - 将参数发送到 Polly 中的后备操作

c# - HMACSHA1 SSL 问题

xml - 批量修改XML文件

java - 如何在没有标记值的情况下将映射编码为 xml

xml - 如何将 Xpath 语法转换为 XSL/XSLT 语法?

c# - 插入和更新 mysql 值 C#

c# - 我无法截屏

c# - 使用 map 坐标确定点是否在矩形中

java - Android studio gradle.build 应用程序午餐时出现问题

jquery - 来自 Chrome 扩展的 jQuery AJAX 调用问题