我需要从具有指定属性名称的所有节点获取所有值的集合。例如,从下面的XML中,我需要来自所有节点的值的集合,其中Country是变量之一:
CAN
true
false
US
true
false
MEX
true
false
我已经摆弄了几个小时并查看了我能找到的所有MSDN示例,并且我已经空了。
更新: 随着我的进步,我会继续更新。管理以获取XML的更新,这使得过滤变得更加简单并且也更新了我的查询。现在的问题是我只得到第一个节点而不是所有节点的集合,其名称="国家"
最终更新:问题解决了。请参阅下面的答案。很高兴看到任何建议的改进。
这是我使用的XML:
<?xml version="1.0" encoding="utf-8"?>
<FoobarData ReportId="0cd8eacf-b577-4974-ae15-1496c5ec06b8">
<FoobarInfo>
<PreparedBy>Bob Boozer</PreparedBy>
<ReviewedBy>Connie Careful</ReviewedBy>
</FoobarInfo>
<FoobarFoos>
<Foo>
<FooVariables>
<FooVariable VariableName="Country">
<VariableValue>CAN</VariableValue>
<VariableIsRed>true</VariableIsRed>
<VariableIsHappy>false</VariableIsHappy>
</FooVariable>
<FooVariable VariableName="Company">
<VariableValue>Company A</VariableValue>
<VariableIsRed>true</VariableIsRed>
<VariableIsHappy>false</VariableIsHappy>
</FooVariable>
<FooVariable VariableName="DaysWithoutInjury">
<VariableValue>11203</VariableValue>
<VariableIsRed>false</VariableIsRed>
<VariableIsHappy>false</VariableIsHappy>
</FooVariable>
<FooVariable VariableName="DaysSinceBigMeeting">
<VariableValue>857</VariableValue>
<VariableIsRed>false</VariableIsRed>
<VariableIsHappy>true</VariableIsHappy>
</FooVariable>
</FooVariables>
</Foo>
<Foo>
<FooVariables>
<FooVariable VariableName="Country">
<VariableValue>US</VariableValue>
<VariableIsRed>true</VariableIsRed>
<VariableIsHappy>false</VariableIsHappy>
</FooVariable>
<FooVariable VariableName="Company">
<VariableValue>Company B</VariableValue>
<VariableIsRed>true</VariableIsRed>
<VariableIsHappy>false</VariableIsHappy>
</FooVariable>
<FooVariable VariableName="DaysWithoutInjury">
<VariableValue>976</VariableValue>
<VariableIsRed>false</VariableIsRed>
<VariableIsHappy>false</VariableIsHappy>
</FooVariable>
<FooVariable VariableName="DaysSinceBigMeeting">
<VariableValue>780</VariableValue>
<VariableIsRed>false</VariableIsRed>
<VariableIsHappy>true</VariableIsHappy>
</FooVariable>
</FooVariables>
</Foo>
<Foo>
<FooVariables>
<FooVariable VariableName="Country">
<VariableValue>MEX</VariableValue>
<VariableIsRed>true</VariableIsRed>
<VariableIsHappy>false</VariableIsHappy>
</FooVariable>
<FooVariable VariableName="Company">
<VariableValue>Company C</VariableValue>
<VariableIsRed>true</VariableIsRed>
<VariableIsHappy>false</VariableIsHappy>
</FooVariable>
<FooVariable VariableName="DaysWithoutInjury">
<VariableValue>1455</VariableValue>
<VariableIsRed>false</VariableIsRed>
<VariableIsHappy>false</VariableIsHappy>
</FooVariable>
<FooVariable VariableName="DaysSinceBigMeeting">
<VariableValue>580</VariableValue>
<VariableIsRed>false</VariableIsRed>
<VariableIsHappy>true</VariableIsHappy>
</FooVariable>
</FooVariables>
</Foo>
</FoobarFoos>
</FoobarData>
答案 0 :(得分:0)
这有效:
var fileData = XElement.Load(srcFile1);
var xElement1 = fileData.Element("FoobarFoos");
if (xElement1 != null)
{
var element1 = xElement1.Element("Foo");
if (element1 != null)
{
var xElement =
element1.Element("FooVariables");
if (xElement != null)
{
var variableCollection =
from element in fileData.Descendants("FooVariable")
where (string) element.Attribute("VariableName").Value == "Country"
select element;
}
}
}
产地:
<FooVariable VariableName="Country">
<VariableValue>CAN</VariableValue>
<VariableIsRed>true</VariableIsRed>
<VariableIsHappy>false</VariableIsHappy>
</FooVariable>
<FooVariable VariableName="Country">
<VariableValue>US</VariableValue>
<VariableIsRed>true</VariableIsRed>
<VariableIsHappy>false</VariableIsHappy>
</FooVariable>
<FooVariable VariableName="Country">
<VariableValue>MEX</VariableValue>
<VariableIsRed>true</VariableIsRed>
<VariableIsHappy>false</VariableIsHappy>
</FooVariable>