【问题标题】:Using dictionary notation to get xml values使用字典表示法获取 xml 值
【发布时间】:2019-03-26 09:44:26
【问题描述】:

我有 XML,并想使用数组/数据表等符号来获取节点的值

<Response>
  <Outcome>
    <KeyValueOfstringOutcomepQnxSKQu>
      <Key>Icon</Key>
      <Value>
        <DataType>System.String</DataType>
        <Field>Icon</Field>
        <Value>O</Value>
      </Value>
    </KeyValueOfstringOutcomepQnxSKQu>
    <KeyValueOfstringOutcomepQnxSKQu>
      <Key>IconDescription</Key>
      <Value>
        <DataType>System.String</DataType>
        <Field>IconDescription</Field>
        <Value>Old</Value>
      </Value>
    </KeyValueOfstringOutcomepQnxSKQu>
    <KeyValueOfstringOutcomepQnxSKQu>
      <Key>IconLongDescription</Key>
      <Value>
        <DataType>System.String</DataType>
        <Field>IconLongDescription</Field>
        <Value>Older</Value>
      </Value>
    </KeyValueOfstringOutcomepQnxSKQu>
  </Outcome>
</Response>

我想做类似outcome.Key[IconDescription].Value 的操作来给我一个“旧”的值

【问题讨论】:

  • 这是指什么语言?你做了哪些尝试?
  • 使用 c#,我尝试将 XML 转换为数组以获取这样的数据,但失败了
  • 您发布的不是表格或字典符号。这是特定于您的应用程序的东西。 XML 元素的名称不指定任何类型的行为。仅仅因为一个元素被命名为 Key 和另一个 Value 并不意味着它们是表或字典的一部分。
  • 发布您遇到问题的 C# 代码。
  • 鉴于此 XML 的规则性,您可以将其反序列化为具体的类并编写代码将它们转换为您想要的形式。您也可以使用 Linq to XML 来加载字符串并对其进行转换。另一方面,这种模式相当浪费。数据类型之类的架构信息应该是 XSD 的一部分,而不是文档本身。 IconIconDescription 等应该是属性或元素。

标签: c# .net xml xpath


【解决方案1】:

Linq 通过XDocumentclass 提供对XML 的访问,它允许您针对XML 运行XPath。虽然它并不完全符合您理想的 XPath 风格,但它确实提供了一种方便的查询语言来访问 XML 节点,并且您的标签表明您可能对 XPath 解决方案感兴趣!

以下是使用XDocument 查询 XML 文件的示例。对于这个例子,我只是从流中读取一个文件。

using System.Xml.Linq;
using System.Xml.XPath;

...

static void Main(string[] args)
{
    XDocument doc = XDocument.Load(new FileStream(@"C:\path_to\input.xml", FileMode.Open));

    string desrcription = doc.XPathSelectElement("/Response/Outcome/KeyValueOfstringOutcomepQnxSKQu[Key='IconDescription']/Value/Value").Value;

    Console.WriteLine(desrcription);
    Console.ReadLine();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 2013-08-22
    • 1970-01-01
    • 2019-01-29
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多