以下是我的XML文件示例
<?xml version="1.0" encoding="UTF-8"?>
<summary>
<testresult>
<result value="10" name="long">100</result>
<result value="12" name="short">200</result>
<result value="14" name="long">300</result>
</testresult>
<testresult>
<result value="10" name="short">50</result>
<result value="12" name="short">60</result>
<result value="14" name="long">70</result>
</testresult>
</summary>
我需要获取结果元素的属性值。
我是使用foreach循环完成的,如下所示。
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(item.Value);
XmlNodeList nodelist = xmlDoc.SelectNodes("//testresult");
for (int i = 0; i < nodelist.Count; i++)
{
foreach (XmlElement child in nodelist[i])
{
if (child.HasAttributes)
{
result.Add(child.Attributes["value"].Value); //This is working fine.
}
}
}
我的最终目标是识别名称并获取值,如果name =“long”。
为此我需要获取名称属性的值。 我需要这样做而不使用foreach循环。任何建议在for循环中实现我的任务 ?
感谢。
答案 0 :(得分:0)
您可以使用XDocument轻松解析xml:
var xDoc = XDocument.Load(@"YourXmlFile");
var result = xDoc.Descendants("result")
.Where(x=>x.Attribute("name").Value=="long")
.Select(x=>x.Value);
答案 1 :(得分:0)
如果您可以使用LINQ to XML,那么您甚至可以将结果作为整数
var xdoc = XDocument.Load(item.Value);
var results = from r in xdoc.Descendants("result")
where (string)r.Attribute("name") == "long"
select (int)r.Attribute("value");
输出:
[10, 14, 14]
如果必须使用XmlDocument
var result = from XmlElement tr in xmlDoc.SelectNodes("//testresult")
from XmlElement r in tr
where r.Attributes["name"].Value == "long"
select r.Attributes["value"].Value;
您还可以提供更多精确的XPath
var result = from XmlElement r in xmlDoc.SelectNodes("//testresult/result[@name='long']")
select r.Attributes["value"].Value;
答案 2 :(得分:0)
使用xml linq获取所有值
J = Base.ReshapedArray(Jvec,(3,3), ())