如何使用linq计算元素中的节点
how to count the node in elements with linq
我有 xml 看起来像这样:
<?xml version="1.0"?>
<planets>
<planet number="1" diameter="3030 miles" year="88 earth days">
<name>Mercury</name>
</planet>
<planet number="2" diameter="7516 miles" year="225 earth days">
<name>Venus</name>
</planet>
<planet number="3" diameter="7926 miles" year="365 earth days">
<name>Earth</name>
<moons>
<moon diameter="2160 miles">The Moon</moon>
</moons>
</planet>
<planet number="4" diameter="4217 miles" year="687 earth days">
<name>Mars</name>
<moons>
<moon diameter="17 miles">Phobos</moon>
<moon diameter="9 miles">Deimos</moon>
</moons>
</planet>
</planets>
我尝试查询月亮的数量。
例如,对于火星,我想要 2 作为结果,然后我想将其与在文本框中输入的数字进行比较。
var text = Request.Params[0];
XDocument xdoc = XDocument.Load(Server.MapPath("~/solar.xml"));
XDocument xresp = new XDocument(new XElement("planets"));
if(text != null)
{
IEnumerable<XElement> lune =
from b in xdoc.Elements("planets").Elements("planet")
where int.Parse(b.Element("moons").Count()) == int.Parse(text)
select b;
foreach (XElement xEle in lune)
xresp.Element("planets").Add(xEle);
}
Response.Clear();
Response.ContentType = "text/xml";
Response.ContentEncoding = System.Text.Encoding.UTF8;
xresp.Save(Response.Output);
Response.End();
您应该计算有多少 <moon>
个元素,而不是 <moons>
并计算它。但是您需要这样编写查询:
b.Elements("moons").Elements("moon").Count()
当 运行 查询有 0 个或多个结果时,您需要使用 Elements()
来确保返回一个集合。如果您使用 Element()
,则返回所选元素或 null
(如果不存在)。在您的情况下,并非每个行星都有 <moons>
元素。
我有 xml 看起来像这样:
<?xml version="1.0"?>
<planets>
<planet number="1" diameter="3030 miles" year="88 earth days">
<name>Mercury</name>
</planet>
<planet number="2" diameter="7516 miles" year="225 earth days">
<name>Venus</name>
</planet>
<planet number="3" diameter="7926 miles" year="365 earth days">
<name>Earth</name>
<moons>
<moon diameter="2160 miles">The Moon</moon>
</moons>
</planet>
<planet number="4" diameter="4217 miles" year="687 earth days">
<name>Mars</name>
<moons>
<moon diameter="17 miles">Phobos</moon>
<moon diameter="9 miles">Deimos</moon>
</moons>
</planet>
</planets>
我尝试查询月亮的数量。
例如,对于火星,我想要 2 作为结果,然后我想将其与在文本框中输入的数字进行比较。
var text = Request.Params[0];
XDocument xdoc = XDocument.Load(Server.MapPath("~/solar.xml"));
XDocument xresp = new XDocument(new XElement("planets"));
if(text != null)
{
IEnumerable<XElement> lune =
from b in xdoc.Elements("planets").Elements("planet")
where int.Parse(b.Element("moons").Count()) == int.Parse(text)
select b;
foreach (XElement xEle in lune)
xresp.Element("planets").Add(xEle);
}
Response.Clear();
Response.ContentType = "text/xml";
Response.ContentEncoding = System.Text.Encoding.UTF8;
xresp.Save(Response.Output);
Response.End();
您应该计算有多少 <moon>
个元素,而不是 <moons>
并计算它。但是您需要这样编写查询:
b.Elements("moons").Elements("moon").Count()
当 运行 查询有 0 个或多个结果时,您需要使用 Elements()
来确保返回一个集合。如果您使用 Element()
,则返回所选元素或 null
(如果不存在)。在您的情况下,并非每个行星都有 <moons>
元素。