我是C#的新手,刚开始使用XmlElement及其SelectSingleNode方法.在我的XML文件中,有一个标签可能有值(即<tag>value</tag>)或为空(即<tag></tag>).如果它为空,则SelectSingleNode返回null.
我目前正在使用以下代码来捕获标记的值:
XmlElement elem = ....
string s = elem.SelectSingleNode("somepath").Value;
Run Code Online (Sandbox Code Playgroud)
此代码显然会引发空标记的异常.但是,对我来说,空标记是一个有效值,我希望我的字符串的值为"".
用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>
Run Code Online (Sandbox Code Playgroud)
CS代码:
XmlDocument doc = new XmlDocument();
doc.Load("name.xml");
foreach (XmlElement elem in doc.SelectNodes("Elements/Element"))
{
myvalue = elem.SelectSingleNode("Type/text()").Value;
}
Run Code Online (Sandbox Code Playgroud)
Pav*_*aev 10
您的示例代码:
myvalue = elem.SelectSingleNode("Type/text()").Value;
Run Code Online (Sandbox Code Playgroud)
是问题所在.你在那里使用的XPath表达式并不意味着"给我元素文本Type".它意味着"给我所有元素类型的子文本节点".并且空元素没有任何子文本节点(XPath文档模型中的文本节点不能为空).如果要获取节点的文本值,则应使用:
myvalue = elem.SelectSingleNode("Type").InnerText;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48775 次 |
| 最近记录: |