简体   繁体   中英

xml XPathSelectElements => to string type

I have the following XML structure:

<?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>

I need to get all the string nodes from the xml file to a string variable, like this:

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

But I am getting the following in one row of the variable query :

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

I want to get a string like this:

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

Is this possible?

Thanks!

I would suggest you something like:

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);

The value variable will contain all the taxids, which have at least one string child with value 723 .

Another variant, which doesn't use XPath for the children checking:

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);
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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM