【问题标题】:how to count the node in elements with linq如何使用linq计算元素中的节点
【发布时间】:2019-08-26 01:08:38
【问题描述】:

我的 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>

我尝试查询月数。

例如,对于 Mars,我想要 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();

【问题讨论】:

    标签: xml linq-to-xml


    【解决方案1】:

    您应该计算有多少 &lt;moon&gt; 元素,而不是 &lt;moons&gt; 并计算它。但是您会希望这样编写查询:

    b.Elements("moons").Elements("moon").Count()
    

    在运行具有 0 个或多个结果的查询时,您需要使用 Elements() 来确保返回一个集合。如果使用Element(),则返回所选元素,如果不存在则返回null。在您的情况下,并非每个行星都有 &lt;moons&gt; 元素。

    【讨论】:

      猜你喜欢
      • 2015-09-28
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多