Использование словарной нотации для получения значений XML - PullRequest
0 голосов
/ 26 марта 2019

У меня есть 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, чтобы получить значение"Старый"

1 Ответ

0 голосов
/ 27 марта 2019

Linq предоставляет доступ к XML через класс XDocument, который позволяет вам запускать XPath против XML.Хотя он не совсем соответствует стилю вашего идеального 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...