我有以下XML:
<xml>
<ObsCont xCampo="field1">
<xTexto>example1</xTexto>
</ObsCont>
<ObsCont xCampo="field2">
<xTexto>example2</xTexto>
</ObsCont>
<ObsCont xCampo="field3">
<xTexto>example3</xTexto>
</ObsCont>
</xml>
我如何(使用linq)获取xTexto标记内部具有xCampo属性“field2”的ObsCont作为父标记的内容?
(c#,vb.net,您的选择)
答案 0 :(得分:2)
XDocument xml = XDocument.Parse(@"<your XML>");
from field in xml.Elements("ObsCont")
where field.Attribute("xCampo") != null &&
field.Attribute("xCampo").Value == "field2"
select field.Element("xTexto").Value;
这将返回一个IEnumerable类型字符串,其中包含具有您指定条件的所有值。
答案 1 :(得分:1)
我会将Linq用于XML:
XDocument doc = XDocument.Load("input.xml");
XElement element = doc
.Descendants("ObsCont")
.Single(x => x.Attribute("xCampo").Value == "field2");
Console.WriteLine(element.Value);
答案 2 :(得分:1)
string s = @"<xml>
<ObsCont xCampo=""field1"">
<xTexto>example1</xTexto>
</ObsCont>
<ObsCont xCampo=""field2"">
<xTexto>example2</xTexto>
</ObsCont>
<ObsCont xCampo=""field3"">
<xTexto>example3</xTexto>
</ObsCont>
</xml>";
XElement xe = XElement.Parse(s);
var n1 = xe.Elements("ObsCont")
.Where(a => a.Attribute("xCampo") != null &&
a.Attribute("xCampo").Value == "field2")
.Select(a => a).SingleOrDefault();
if (n1 != null)
{
var n2 = n1.Descendants("xTexto").SingleOrDefault();
Console.Write(n2.Value);
}