从XML字符串获取Innertext,该字符串只有一个节点没有循环

时间:2016-05-26 23:28:34

标签: c# xml

我有一个XML字符串,如下所示

<?xml version="1.0" encoding="Windows-1252"?><Product><ID>0701161476416</ID><UNIQUE_ID>test26051602</UNIQUE_ID><STATUS>DONE</STATUS></Product>

我知道我的XML字符串将始终具有单个节点ans,因此我不想查看,而是希望获得Unique_ID和Status内部值而不进行循环。

我可以知道更好的方法吗,我确实有以下代码实际循环遍历每个节点

                            XmlDocument xm = new XmlDocument();
                            xm.LoadXml(XML_STRING);

                            XmlNodeList xnList = xm.SelectNodes("/Product/Product");
                            foreach (XmlNode xn in xnList)
                            {
                                string uniqueID = xn["UNIQUE_ID"].InnerText;
                                string status = xn["STATUS"].InnerText;                               
                            }

4 个答案:

答案 0 :(得分:4)

您可以使用SelectSingleNode()来实现此目的:

XmlNode product = xm.SelectSingleNode("/Product/Product");
string uniqueID = product["UNIQUE_ID"].InnerText;
string status = product["STATUS"].InnerText; 

或者,如果Product是根元素,那么您可以从XmlDocument的{​​{3}}属性访问它:

XmlNode product = xm.DocumentElement;
string uniqueID = product["UNIQUE_ID"].InnerText;
string status = product["STATUS"].InnerText; 

答案 1 :(得分:1)

如果您有多个产品,请尝试使用xml linq

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string xml =
                "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>" +
                "<Products>" +
                  "<Product>" +
                    "<ID>0701161476416</ID>" +
                    "<UNIQUE_ID>test26051603</UNIQUE_ID>" +
                    "<STATUS>DONE</STATUS>" +
                  "</Product>" +
                  "<Product>" +
                    "<ID>0701161476417</ID>" +
                    "<UNIQUE_ID>test26051604</UNIQUE_ID>" +
                    "<STATUS>DONE</STATUS>" +
                  "</Product>" +
                  "<Product>" +
                    "<ID>0701161476418</ID>" +
                    "<UNIQUE_ID>test26051605</UNIQUE_ID>" +
                    "<STATUS>DONE</STATUS>" +
                  "</Product>" +
                "</Products>";

            XDocument doc = XDocument.Parse(xml);

            var results = doc.Descendants("Product").Select(x => new
            {
                id = (long)x.Element("ID"),
                uniqueID = (string)x.Element("UNIQUE_ID"),
                status = (string)x.Element("STATUS")
            }).ToList();

        }
    }
}

答案 2 :(得分:0)

这可行,但我想有更好的解决方案:

XDocument xm = XDocument.Parse(XML_STRING);
var product = xm.Element("Product").Element("Product");
string uniqueID = product.Element("UNIQUE_ID").Value;
string status = product.Element("STATUS").Value;

答案 3 :(得分:0)

示例Xml的SelectNodes行似乎有误。

XmlNodeList xnList = xm.SelectNodes("/Product");
if (xnList.Count > 0)
{
  string uniqueID = xnList[0]["UNIQUE_ID"].InnerText;
  string status = xnList[0]["STATUS"].InnerText;
}