我有一个看起来像这样的xml:
<ProductTemplate ProductName="FlamingoWhistle" Version="1.8.02" >
<Whistle Type="Red" Version="3.0.5" />
<Size Type="Large" Version="1.0" />
<Whistle Type="Blue" Version="2.4.3" />
</ProductTemplate>
如何检查类型是否等于红色,返回该类型的版本?
这是我尝试过但如果元素不是第一次就失败了
XElement root = XElement.Load(path);
if (XPathSelectElement("Whistle").Attribute("Type") == "Blue")
{
Console.WriteLine(XPathSelectElement("Whistle").Attribute("Version").value));
}
else
{
Console.WriteLine("Sorry, no FlamingoWhistle in that color");
}
答案 0 :(得分:1)
这应该可以解决问题
foreach(XElement xe in root.Elements("Whistle"))
{
if (xe.Attribute("Type").Value == "Red")
{
Console.WriteLine(xe.Attribute("Version").Value);
}
}
使用linq
string version = root.Elements("Whistle")
.Where(x => x.Attribute("Type").Value == "Red")
.First().Attribute("Version").Value;
的xpath
string version = root.XPathSelectElement("Whistle[@Type='Red']").Attribute("Version").Value;
<强>更新强>
首先,您可能需要更正属性层次结构的xml,在当前的xml元素中,Size不是Whistle的子项。我认为它是孩子
<ProductTemplate ProductName="FlamingoWhistle" Version="1.8.02">
<Whistle Type="Red" Version="3.0.5">
<Size Type="Large" Version="1.0" />
</Whistle>
<Whistle Type="Blue" Version="2.4.3" />
</ProductTemplate>
从size元素
中检索版本foreach (XElement xe in root.Elements("Whistle"))
{
if (xe.Attribute("Type").Value == "Red")
{
Console.WriteLine(xe.Element("Size").Attribute("Version").Value);
}
}
LINQ
string version = root.Elements("Whistle")
.Where(x => x.Attribute("Type").Value == "Red")
.First().Element("Size").Attribute("Version").Value;
的xpath
string version = root.XPathSelectElement("Whistle[@Type='Red']/Size").Attribute("Version").Value;