保存与XPath搜索的同一父元素连接的单个值



我有一个简单的xml文件。

<?xml version="1.0" encoding="ISO-8859-1"?>
<cars>
  <car>
    <name>megane2</nazwa>
    <averagefuelconsumption>2</averagefuelconsumption>
  </car>
</cars>

我想将averagefuelconsumption值保存到字符串中。在XML中有很多汽车,但我只想要一辆。我尝试使用XPath:

string averagefuelconsumption = "";
string CarName = "megane2";
XmlTextReader reader = new XmlTextReader(Application.StartupPath + "\cars.xml");
XmlDocument doc = new XmlDocument();
doc.Load(reader);
reader.Close();
XmlElement onecar = doc.DocumentElement;
onecar.SelectSingleNode("/cars/car[name='" + CarName + "']/averagefuelconsumption");
averagefuelconsumption = onecar.Value;

不幸的是,字符串为空。

而不是

onecar.SelectSingleNode(...)

使用

doc.SelectSingleNode(...)

最后,您想要:

var element = doc.SelectSingleNode("/cars/car[name='" + CarName + "']/averagefuelconsumption");
averagefuelconsumption = element.InnerText;

要获得xmlelement的字符串,您必须innertext。

string averagefuelconsumption = "";
string CarName = "megane2";
XmlTextReader reader = new XmlTextReader(Application.StartupPath + "\cars.xml");
XmlDocument doc = new XmlDocument();
doc.Load(reader);
reader.Close();
XmlElement onecar = doc.DocumentElement;
onecar.SelectSingleNode("/cars/car[name='" + CarName + "']/averagefuelconsumption");
averagefuelconsumption = onecar.InnerText;

另外,请注意,您的XML也无效。应该是:

   <?xml version="1.0" encoding="ISO-8859-1"?>
   <cars>
     <car>
       <name>megane2</name>
       <averagefuelconsumption>2</averagefuelconsumption>
     </car>
   </cars>

在Microsoft开发人员网络上有一个很好的示例。

这是我的首选方法,即使它不使用xpath:

        string xml = @"
            <cars>
                <car>
                    <name>megane2</name>
                    <averagefuelconsumption>2</averagefuelconsumption>
                </car>
            </cars>";
        XDocument xDoc = XDocument.Parse(xml);
        // same as XDocument.Load("yourpathtofile.xml");
        Func<string, XDocument, string> getAvgFuelConsumption = (car, xd) => xd
            .Descendants("car")
            .First(c => c.Element("name").Value == car)
            .Element("averagefuelconsumption")
            .Value;
        Console.WriteLine(getAvgFuelConsumption("megane2", xDoc));

打印2

相关内容

最新更新