xml的结构是:
<Rules>
<rule ID="1" Parameter="IsD">
<body>
<ID>2</ID>
<Ratio>=</Ratio>
<Value>no</Value>
<Operation>AND</Operation>
<ID>3</IF_ID>
<Ratio>=</Ratio>
<Value>yes</Value>
</body>
<value>no problems</value>
</rule>
</Rules>
如何阅读元素并使用以下结构创建规则:
If (<ID><Ratio><Value><Operation><ID><Ratio><Value>)
ID是一个问题ID。就我而言:
If (2 == no && 3 == yes)
请帮助我。
答案 0 :(得分:2)
您可以使用Elements
类的XElement
方法。例如(假设您循环遍历所有rule
),您可以编写
foreach (var rule in document.Root.Descendants("rule")) {
var body = rule.Element("body");
for (var i=0; i<body.Elements("ID").Count) {
var id = body.Elemets("ID").ElementAt(i);
var ratio = body.Elements("Ratio").ElementAt(i);
var value = body.Elements("Value").ElementAt(i);
/// ...
}
}
请注意,使用Elements
访问ElementAt()
枚举的元素可能效率不高,另一种方法是使用单独的foreach
循环遍历不同的子元素并存储它们位于List
(或更好,使用ToList
扩展方法)。
关键是,Elements
枚举以文档顺序返回子元素,即它们与输入文档中出现的顺序相同(这就是您需要的内容)。
更好的解决方案是(IMO)在输入文档中添加更多结构以反映逻辑,例如:
<Rules>
<rule ID="1" Parameter="IsD">
<body>
<term >
<ID>2</ID>
<Ratio>=</Ratio>
<Value>no</Value>
</term>
<term operation="and">
<ID>3</IF_ID>
<Ratio>=</Ratio>
<Value>yes</Value>
</term>
</body>
<value>no problems</value>
</rule>