c# - 如何使用 LINQ 或 XPath 从 XML 中获取打印的值

标签 c# xml linq xpath

我有点难以使用 XPath 或 LINQ 从 XML 打印值,这对 XPath 和 XML 解析也是新的, 在这里查看了几个示例,但没有任何帮助,因为它们都有具有不同属性名称的 XML,对于我的情况,XML 是不同的:

<Entities TotalResult="3">
    <Entity Type="test-set-folder">
      <Fields>
          <Field Name="id">
            <Value>12457</Value>
          </Field>
          <Field Name="parent-id">
            <Value>0</Value>
          </Field>
          <Field Name="last-modified">
            <Value>2015-03-09 14:09:57</Value>
          </Field>
          <Field Name="description">
             <Value/>
          </Field>
          <Field Name="view-order"/>
          <Field Name="name">
            <Value>.NET</Value>
          </Field>
     </Fields>
   </Entity>
   <Entity Type="test-set-folder">
     <Fields>
        <Field Name="id">
           <Value>15487</Value>
        </Field>
        <Field Name="parent-id">
          <Value>0</Value>
        </Field>
        <Field Name="last-modified">
          <Value>2015-03-15 13:00:02</Value>
        </Field>
        <Field Name="description">
          <Value/>
        </Field>
        <Field Name="view-order"/>
        <Field Name="name">
          <Value>Python</Value>
        </Field>
     </Fields>
  </Entity>
</Entities>

它具有相同的属性 Field 但不同的 Name

谁能帮我打印属性的 Name 及其 Value

我需要遍历每个实体并打印其Name : Value

到目前为止,我已经尝试过同时使用 Xpath 和 LINQ:

var doc = XDocument.Load("XMLFile1.xml");
        foreach (var child in doc.Element("Field Name").Elements())
        {
            Console.WriteLine(child.Name);
        } 

但说真的,我不太了解它,所以我的方法是完全错误的。

我的预期输出是:

Id: 12457
parent-id: 0
last-modified:2015-03-09 14:09:57
description:
view-order:
name: .NET

下一个实体也一样。

最佳答案

由于某些字段缺少值元素,您可以尝试这样做:

XElement element = XElement.Load("XmlFile.xml"); 
var query = from field in element.Descendants("Field")
select new
{
    NameAttribute = field.Attribute("Name").Value,
    Value = field.Descendants("Value").Any() ?
    field.Element("Value").Value : "No Value"
};
var namesAndValues = query.ToList()

关于c# - 如何使用 LINQ 或 XPath 从 XML 中获取打印的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32375881/

相关文章:

java - 使用 OpenOffice SDK 创建数据源时抛出异常

c# - 如何从 Xamarin iOS 调用 sysctl?

c# - 在 C# 中捕获 StackOverflow 异常的通用方法是什么?

ruby - Nokogiri 不在 ruby​​ 中解析 XML - xmlns 问题?

c# - LINQ 搜索相似字符串(名称)

c# - 连接被拒绝 - Redis 在 ASP.Net Core 2.1 中用于数据保护 key

c++ - 使用 Xerces-C 在我的 xml 中添加样式表声明

c - 在C中使用xml

c# - LINQ 挑战

c# - 如何使用 LINQ 查找字典列表中每个键的最大值?