我有一个简单的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