xml XPathSelectElements => для строкового типа - PullRequest
0 голосов
/ 19 декабря 2011

У меня есть следующая структура XML:

<?xml version="1.0" encoding="utf-8"?>
<xml>
  <root>
    <Item>
      <taxids>
        <string>330</string>
        <string>374</string>
        <string>723</string>
        <string>1087</string>
        <string>1118</string>
        <string>1121</string>
      </taxids>
    </Item>
  </root>
</xml>

Мне нужно получить все строковые узлы из XML-файла в строковую переменную, например:

var query = from ip in doc.XPathSelectElements("xml/root/Item")
            where ip.XPathSelectElement("taxid").Value == "723"
            select ip.XPathSelectElements("taxids").ToString();

Но я получаю следующее в одной строке переменной query:

"System.Xml.XPath.XPathEvaluator+<EvaluateIterator>d__0`1[System.Xml.Linq.XElement]"

Я хочу получить такую ​​строку:

  <taxids><string>330</string><string>374</string><string>723</string><string>1087</string><string>1118</string><string>1121</string></taxids>

Возможно ли это?

Спасибо!

Ответы [ 2 ]

1 голос
/ 19 декабря 2011

Я бы предложил вам что-то вроде:

var values = from ids in doc.XPathSelectElements("/xml/root/Item/taxids")
                     from id in ids.XPathSelectElements("string")
                     where id.Value.Contains("723")
                     select ids.ToString();

var result = string.Join("", values);

Переменная value будет содержать все таксиды, у которых есть хотя бы один дочерний элемент string со значением 723.

Другой вариант, который не использует XPath для проверки детей:

var values = from ids in doc.XPathSelectElements("/xml/root/Item/taxids")
                     from id in ids.Elements("string")
                     where id.Value.Contains("723")
                     select ids.ToString();

var result = string.Join("\n", values);
0 голосов
/ 19 декабря 2011
var doc = XDocument.Parse(@"<?xml version=""1.0"" encoding=""utf-8""?>
<xml>
<root>
<Item>
<taxids>
<string>330</string>
<string>374</string>
<string>723</string>
<string>1087</string>
<string>1118</string>
<string>1121</string>
</taxids>
</Item>
</root>
</xml>");

var query = doc.XPathSelectElement("xml/root/Item/taxids");

Console.WriteLine(query);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...