Поиск строк между одноименными тегами XML в C# - PullRequest
0 голосов
/ 26 февраля 2020

Я получаю XML код из HTML страницы в моей WinForm в C#.

Пример XML:

<param>
<value><array><data>
<value><string>Number1</string></value>
<value><string>11194652</string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>Error</string></value>
<value><string>200</string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>Number2</string></value>
<value><string>2155847</string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>Print</string></value>
<value><string>no</string></value>
</data></array></value>
</param>

Теперь мне нужны данные для номера 1 (11194652), номера 2 (2155847) и ошибки (200). К сожалению, я не могу искать теги, потому что все они названы одинаково. Каков наилучший способ отделить данные 11194652, 200 и 2155847 от этого XML?

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 26 февраля 2020

Вы можете преобразовать необходимую информацию в словарь следующим образом.

var xDoc = XDocument.Parse($"<root>{xml}</root>");
var dataValues = xDoc.Descendants("param").Select(x=>x.Descendants("string").Select((c=>c.Value)))
                        .ToDictionary(x=> x.First(),y=>y.Last());

Это приведет к следующему выводу:

enter image description here

Имея словарь, вы можете искать требуемые значения с помощью клавиш

dataValues["Number1"]
dataValues["Number2"]
dataValues["Error"]
1 голос
/ 26 февраля 2020

Если вы добавили узел root к вашим данным XML, вы можете найти узел "Number1", "Error" или "Number2", используя XPath, а затем выбрать следующий узел-брат.

Попробуйте следующий метод:

private static string GetValue(string key)
{
    XDocument xDocument = XDocument.Parse(yourXmlString);
    var elem = xDocument.XPathSelectElement("/root/param/value/array/data/value/string[text() = 'Error']/../following-sibling::value/string");
    return elem.Value;
}

GetValue("Number1") должен вернуть "11194652", а GetValue("Error") должен вернуть "200".

1 голос
/ 26 февраля 2020

с использованием XDocument

var xdoc = XDocument.Load(xmlFile);
var results = xdoc.Descendants("string")
                  .Select(x => x.Value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...