【问题标题】:How to find a value from a specific element by name?如何按名称从特定元素中查找值?
【发布时间】:2020-11-06 08:42:02
【问题描述】:

我有一个 XML 文件,看起来像这样(只有一个 sn-p)

 <?xml version="1.0" encoding="UTF-8" ?> 
 <Message>
   <Header>
      <Message_Type>RFP</Message_Type> 
      <Message_Date>2020-11-05T09:36:03+01:00</Message_Date> 
      <Sequence_Number>225</Sequence_Number> 
   etc...

我正在寻找找到值RFP 的最快方法。
我只知道我需要为其获取值的元素名称。

例如,我得到像 Message_TypeMessage_Date 这样的名称,现在我需要获取这些元素名称的值。
xml中没有属性

我做了一些搜索,我只能找到如何找到具有特定属性的元素,或具有特定值的所有元素,诸如此类。
这似乎是一些非常基本的东西,但我就是不知道该怎么做。

我试过这样的

var headerElements = XElement.Load(fileName).Elements("Header");
var element = headerElements.Where(x => x.Element("Message_Type").Name == "Message_Type");

这用整个Header 填充元素,这对我来说似乎没用。我只需要'Header'中一个元素的值,而不是全部

那么这里的某个好心人可以让我在如何做到这一点上找到正确的方向吗?

【问题讨论】:

    标签: c# xml linq


    【解决方案1】:

    您当前的查询正在使用 Where 调用,它只会过滤 - 它不会更改您正在查看的元素。

    你想要的只是 Element 方法本身:

    var messageTypeElements = headerElements.Elements("Message_Type");
    

    这将为您提供来自所有 Header 元素的所有 &lt;Message_Type&gt; 元素。

    如果实际上您只有一个 &lt;Header&gt; 和一个 &lt;Message_Type&gt;,那么您可以改用 Element

    var message = XElement.Load(fileName);
    var header = message.Element("Header");
    var messageType = header.Element("Message_Type");
    

    (Element 方法将返回具有给定名称的 first 元素,如果没有,则返回 null。我们不知道您的程序是否应该只抛出异常如果没有 headers/message_types,或者更优雅地处理它。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-19
      • 2016-06-08
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 2018-07-30
      相关资源
      最近更新 更多