如何在C#中通过属性名过滤得到XML节点的值?
How to get values of XML node filtering by attribute name in C#?
这是我的 XML 文件的一部分
<summary>
<testcase>
<result value="-45">100</result>
<result value="0">200</result>
<result value="45">300</result>
</testcase>
<testcase>
<result value="-45">1000</result>
<result value="0">2000</result>
<result value="45">3000</result>
</testcase>
<testcase>
<result value="-45">0.1</result>
<result value="0">0.2</result>
<result value="45">0.3</result>
</testcase>
</summary>
我需要通过按属性名称过滤来获取元素值。
As an Example I need to get all values where attribute = 45 Then
Answer is 300,3000,0.3
XmlDocument doc = new XmlDocument();
doc.Load(_xmlFilePath);
XmlNodeList nodelist = doc.SelectNodes("//testcase");
for (int i = 0; i < nodelist.Count; i++)
{
Double value;
Double.TryParse(nodelist[i].SelectSingleNode("result").Attributes["45"].InnerText, out value);
Console.WriteLine("value : " + value);
}
但上面的代码给出了以下错误消息。
Object reference not set to an instance of an object.
如有任何建议,我们将不胜感激。
谢谢。
这可能会帮助您解决问题
XmlDocument doc = new XmlDocument();
doc.Load(_xmlFilePath);
XmlNodeList nodelist = doc.SelectNodes("//result[@value=45]");
for (int i = 0; i < nodelist.Count; i++)
{
double value = double.Parse(nodelist[i].InnerText);
Console.WriteLine("value : " + value);
}
这可能对你有用
XDocument xdc = XDocument.Load(YourXMLFile);
var rslt = xdc.Descendants("result").Where(x => x.Attribute("value").Value == "45");
string rsltstr = string.Empty;
foreach(XElement el in rslt)
{
rsltstr = rsltstr + el.Value + ", ";
}
或
var rslt = xdc.Descendants("result")
.Where(x => x.Attribute("value").Value == "45")
.Select(q=>q.Value);
这是我的 XML 文件的一部分
<summary>
<testcase>
<result value="-45">100</result>
<result value="0">200</result>
<result value="45">300</result>
</testcase>
<testcase>
<result value="-45">1000</result>
<result value="0">2000</result>
<result value="45">3000</result>
</testcase>
<testcase>
<result value="-45">0.1</result>
<result value="0">0.2</result>
<result value="45">0.3</result>
</testcase>
</summary>
我需要通过按属性名称过滤来获取元素值。
As an Example I need to get all values where attribute = 45 Then Answer is 300,3000,0.3
XmlDocument doc = new XmlDocument();
doc.Load(_xmlFilePath);
XmlNodeList nodelist = doc.SelectNodes("//testcase");
for (int i = 0; i < nodelist.Count; i++)
{
Double value;
Double.TryParse(nodelist[i].SelectSingleNode("result").Attributes["45"].InnerText, out value);
Console.WriteLine("value : " + value);
}
但上面的代码给出了以下错误消息。
Object reference not set to an instance of an object.
如有任何建议,我们将不胜感激。
谢谢。
这可能会帮助您解决问题
XmlDocument doc = new XmlDocument();
doc.Load(_xmlFilePath);
XmlNodeList nodelist = doc.SelectNodes("//result[@value=45]");
for (int i = 0; i < nodelist.Count; i++)
{
double value = double.Parse(nodelist[i].InnerText);
Console.WriteLine("value : " + value);
}
这可能对你有用
XDocument xdc = XDocument.Load(YourXMLFile);
var rslt = xdc.Descendants("result").Where(x => x.Attribute("value").Value == "45");
string rsltstr = string.Empty;
foreach(XElement el in rslt)
{
rsltstr = rsltstr + el.Value + ", ";
}
或
var rslt = xdc.Descendants("result")
.Where(x => x.Attribute("value").Value == "45")
.Select(q=>q.Value);