<maintag>
<CENTER>
<ID>11</ID>
<CENTER>333</CENTER>
</CENTER>
<PRODUCTID>100</PRODUCTID>
<LastNum>0900</LastNum>
</maintag>
我有上面的XML,其中父项和它的一个子节点(即CENTER)有相同的标记名称。我知道我可以在主标签的索引0处的多个步骤中解析它,然后CENTER标签的索引0将给出ID并且中心标签的索引1将给出中心等的值333但是有没有办法可以直接获得ID和CENTER(11,333)的值直接。
答案 0 :(得分:1)
class Program
{
static void Main(string[] args)
{
string xml = @"<maintag>
<CENTER>
<ID>11</ID>
<CENTER>333</CENTER>
</CENTER>
<PRODUCTID>100</PRODUCTID>
<LastNum>0900</LastNum>
</maintag>";
XmlDocument xd = new XmlDocument();
xd.LoadXml(xml);
string center = xd.DocumentElement.SelectSingleNode("CENTER/CENTER").InnerText;
string id = xd.DocumentElement.SelectSingleNode("CENTER/ID").InnerText;
}
答案 1 :(得分:0)
我在这里给你一个非常一般的答案:
var elementsWithChildrenOfSameName =
xmlDoc.Root.Elements()
.Where(ele => ele.Elements().Any(t => t.Name == ele.Name)).ToList();
从那里,您可以轻松获得所需的数据。
或者采用集成查询样式:
var elementsWithChildrenOfSameName =
from parent in xmlDoc.Root.Elements()
from child in parent.Elements()
where child.Name == parent.Name
select parent; // Or maybe select the id's?
答案 2 :(得分:0)
LinqToXml XDocument查询:
XDocument doc = XDocument.Parse(x);
var res = doc.Descendants("CENTER")
.Where(el => el.Elements("ID").Count() > 0 && el.Elements("CENTER").Count() > 0)
.Select(el => new {
id = el.Element("ID").Value,
center = el.Element("CENTER").Value
})
.ToList();
选择所有CENTER标签,其中包含ID和CENTER标签,并将其ID和CENTER值带入新的结果集合。