【问题标题】:How to know whether xml has any node or not如何知道xml是否有任何节点
【发布时间】:2015-11-17 12:53:08
【问题描述】:

我有一个这样的 XML 文档(Microsoft 的 Project XML):

<Columns>
  <Column>
    <Name>A</Name>
    <Width>100</Width>
  </Column>
</Columns>
<Columns>
  <Column>
    <Name>B</Name>
    <Width>200</Width>
  </Column>
</Columns>
<Columns>
 <Column>
   <Name>C</Name>
 </Column>
</Columns>

我正在尝试获取他们的名称和宽度文本:

var man = new XmlNamespaceManager(xdoc.NameTable);
man.AddNamespace("ns", "http://schemas.microsoft.com/project");

XmlNodeList xnList = xdoc.SelectNodes("/ns:Columns/ns:Column", man);

foreach (XmlNode xn in nodeList[i])
        {
            string name = xn["Name"].InnerText);
            string width = xn["Width"].InnerText);
        }

如果 XML 有这些“名称”和“宽度”节点,则没有问题。但是,有时就像上面示例中的最后一个没有“宽度”节点。所以我犯了一个错误。我该如何避免这种情况。我想把它作为“空”字符串。我该怎么办?

【问题讨论】:

  • 如果您使用 C# 6,您可以使用:string name = xn["Name"]?.InnerText ?? string.Empty;,或者如果您真的想要可重用性,请添加以下扩展方法:public static string Read(this XmlNode node, string name, string nonExistantValue = string.Empty) { if (node[name] == null) return nonExistantValue; return node[node].InnerTextl }

标签: c# xml xmlnode xmlnodelist


【解决方案1】:

你可以检查它是否为空:

string name;
if (xn["Name"] == null) 
{
    // Node doesn't exists
    name = string.Empty;
}
else
{
    name = xn["Name"].InnerText;
}  

或者您可以只用一个班轮完成:

string name = xn["Name"] == null ? string.Emtpy : xn["Name"].InnerText;

或者,如果您甚至使用 C# 6:

string name =  xn["Name"]?.InnerText;

如果没有具有该名称的节点,则索引属性将返回 null

【讨论】:

  • 谢谢马丁!我的错!
猜你喜欢
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-30
  • 1970-01-01
相关资源
最近更新 更多