【问题标题】:XML get value from nextNodeXML 从 nextNode 获取值
【发布时间】:2013-01-31 16:53:16
【问题描述】:

我试图在我选择的节点之后从一个节点获取一个值。到目前为止,我已经能够将整个节点信息作为 var 获取,但我被困在如何仅获取值上。

我的 xml 看起来像这样

<COLUMN>
<NAME>Addr1</NAME>
<VALUE>1234 my street</VALUE>
</COLUMN>

我得到这样的节点

var address = (from c in contactInfo.Descendants("NAME")
                                   where c.Value == "Addr1"
                               select c.NextNode).Single();

谢谢

【问题讨论】:

    标签: c# xml-parsing


    【解决方案1】:

    试试:

    (address as XElement).Value
    

    【讨论】:

      【解决方案2】:

      NextNode 返回一个XNode,而您需要一个XElement

      var address = (from c in doc.Descendants("NAME")
          where c.Value == "Addr1"
          select c.NextNode).OfType<XElement>().Single().Value;
      

      我宁愿避免将所有内容放在一行中,而是执行以下操作来添加一些额外的检查:

      var address = (from c in doc.Descendants("NAME")
                      where c.Value == "Addr1"
                      select c.NextNode).Single();
      var element = address as XElement;
      if (element != null) {
          string value = element.Value;
      }
      

      【讨论】:

        【解决方案3】:
        var node = contactInfo.Descendants("COLUMN")
                          .SingleOrDefault(c => c.Element("NAME").Value.Equals("Addr1"))
        
        if (node != null)
             var result = node.Element("VALUE").Value;
        

        【讨论】:

          【解决方案4】:

          您应该选择COLUMN 元素而不是搜索NAME 元素:

          var address = (from c in contactInfo.Descendants("COLUMN")
                         where (string)c.Element("NAME") == "Addr1"
                         select (string)c.Element("VALUE")).Single();
          

          与方法语法相同:

          var address = contactInfo.Descendants("COLUMN")
                                   .Where(c => (string)c.Element("NAME") == "Addr1")
                                   .Select(c => (string)c.Element("VALUE"))
                                   .Single();
          

          您还应该完全确定始终存在一个名为Addr1 的列元素。否则Single() 会抛出异常。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-10-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-05-28
            相关资源
            最近更新 更多