Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何动态获取具有相同名称id的xml文件的最后一个元素_Xml_Elements - Fatal编程技术网

如何动态获取具有相同名称id的xml文件的最后一个元素

如何动态获取具有相同名称id的xml文件的最后一个元素,xml,elements,Xml,Elements,包含族列表的Xml文件。可以随时将族添加到列表中,也可以添加新的子项 <family> <Mother> <child age="1"> <dog-name>dog1</dog-name> </child> <child age="2"> <dog-name>dog1</dog-name> </child&

包含族列表的Xml文件。可以随时将族添加到列表中,也可以添加新的子项

<family>
 <Mother>
      <child age="1">
       <dog-name>dog1</dog-name>
      </child>
      <child age="2">
       <dog-name>dog1</dog-name>
      </child>
      <child age="3">
       <dog-name>dog1</dog-name>
      </child>
      <child age="4">
        <dog-name>dog1</dog-name>
      </child>
   </Mother>
</family>
<family2>
   <Mother>
      <child age="1">
       <dog-name>dog1</dog-name>
      </child>
      <child age="2">
       <dog-name>dog1</dog-name>
      </child>
      <child age="3">
       <dog-name>dog1</dog-name>
      </child>
      <child age="4">
        <dog-name>dog1</dog-name>
      </child>
   </Mother>
</family2>
<family3>
   <Mother>
      <child age="1">
       <dog-name>dog1</dog-name>
      </child>
      <child age="2">
       <dog-name>dog1</dog-name>
      </child>
      <child age="3">
       <dog-name>dog1</dog-name>
      </child>
      <child age="4">
        <dog-name>dog1</dog-name>
      </child>
   </Mother>
</family3>
我还想得到最大孩子的狗名,并输出值。

使用XML Linq

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string xml =
                "<Root>" +
                "<family>" +
                     "<Mother>" +
                          "<child age=\"1\">" +
                           "<dog-name>dog1</dog-name>" +
                          "</child>" +
                          "<child age=\"2\">" +
                           "<dog-name>dog1</dog-name>" +
                          "</child>" +
                          "<child age=\"3\">" +
                           "<dog-name>dog1</dog-name>" +
                          "</child>" +
                          "<child age=\"4\">" +
                            "<dog-name>dog1</dog-name>" +
                          "</child>" +
                       "</Mother>" +
                    "</family>" +
                    "<family2>" +
                       "<Mother>" +
                          "<child age=\"1\">" +
                           "<dog-name>dog1</dog-name>" +
                          "</child>" +
                          "<child age=\"2\">" +
                           "<dog-name>dog1</dog-name>" +
                          "</child>" +
                          "<child age=\"3\">" +
                           "<dog-name>dog1</dog-name>" +
                          "</child>" +
                          "<child age=\"4\">" +
                            "<dog-name>dog1</dog-name>" +
                          "</child>" +
                       "</Mother>" +
                    "</family2>" +
                    "<family3>" +
                       "<Mother>" +
                          "<child age=\"1\">" +
                           "<dog-name>dog1</dog-name>" +
                          "</child>" +
                          "<child age=\"2\">" +
                           "<dog-name>dog1</dog-name>" +
                          "</child>" +
                          "<child age=\"3\">" +
                           "<dog-name>dog1</dog-name>" +
                          "</child>" +
                          "<child age=\"4\">" +
                            "<dog-name>dog1</dog-name>" +
                          "</child>" +
                       "</Mother>" +
                    "</family3>" +
                 "</Root>"; ;

            XElement family = XElement.Parse(xml);

            var results = family.Elements().Select(x => new
            {
                name = x.Name,
                children = x.Descendants("child").Select(y => new
                {
                    age = (int)y.Attribute("age"),
                    dog_name = y.Element("dog-name").Value
                }).OrderByDescending(z => z.age).ToList()
            }).ToList();

            foreach (var family_properties in results)
            {
                Console.WriteLine("Family Name : {0}, Age = {1}, Dog Name = {2}",
                    family_properties.name, family_properties.children.FirstOrDefault().age, family_properties.children.FirstOrDefault().dog_name); 
            }
            Console.ReadLine();
        }
    }
}
​
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Linq;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
字符串xml=
"" +
"" +
"" +
"" +
“狗1”+
"" +
"" +
“狗1”+
"" +
"" +
“狗1”+
"" +
"" +
“狗1”+
"" +
"" +
"" +
"" +
"" +
"" +
“狗1”+
"" +
"" +
“狗1”+
"" +
"" +
“狗1”+
"" +
"" +
“狗1”+
"" +
"" +
"" +
"" +
"" +
"" +
“狗1”+
"" +
"" +
“狗1”+
"" +
"" +
“狗1”+
"" +
"" +
“狗1”+
"" +
"" +
"" +
""; ;
XElement family=XElement.Parse(xml);
var results=family.Elements()。选择(x=>new
{
name=x.name,
children=x.children(“child”)。选择(y=>new
{
年龄=(int)y.属性(“年龄”),
dog_name=y.Element(“dog name”).Value
}).OrderByDescending(z=>z.age).ToList()
}).ToList();
foreach(结果中的var系列属性)
{
WriteLine(“姓氏:{0},年龄={1},狗名={2}”,
family_properties.name,family_properties.children.FirstOrDefault().age,family_properties.children.FirstOrDefault().dog_name);
}
Console.ReadLine();
}
}
}
​

yes运行良好@jdweng我应该在一开始就指定xml来自链接/url它也适用于在线url吗?我应该使用XElement family=XElement.Load(url);url为字符串(文件或url)。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string xml =
                "<Root>" +
                "<family>" +
                     "<Mother>" +
                          "<child age=\"1\">" +
                           "<dog-name>dog1</dog-name>" +
                          "</child>" +
                          "<child age=\"2\">" +
                           "<dog-name>dog1</dog-name>" +
                          "</child>" +
                          "<child age=\"3\">" +
                           "<dog-name>dog1</dog-name>" +
                          "</child>" +
                          "<child age=\"4\">" +
                            "<dog-name>dog1</dog-name>" +
                          "</child>" +
                       "</Mother>" +
                    "</family>" +
                    "<family2>" +
                       "<Mother>" +
                          "<child age=\"1\">" +
                           "<dog-name>dog1</dog-name>" +
                          "</child>" +
                          "<child age=\"2\">" +
                           "<dog-name>dog1</dog-name>" +
                          "</child>" +
                          "<child age=\"3\">" +
                           "<dog-name>dog1</dog-name>" +
                          "</child>" +
                          "<child age=\"4\">" +
                            "<dog-name>dog1</dog-name>" +
                          "</child>" +
                       "</Mother>" +
                    "</family2>" +
                    "<family3>" +
                       "<Mother>" +
                          "<child age=\"1\">" +
                           "<dog-name>dog1</dog-name>" +
                          "</child>" +
                          "<child age=\"2\">" +
                           "<dog-name>dog1</dog-name>" +
                          "</child>" +
                          "<child age=\"3\">" +
                           "<dog-name>dog1</dog-name>" +
                          "</child>" +
                          "<child age=\"4\">" +
                            "<dog-name>dog1</dog-name>" +
                          "</child>" +
                       "</Mother>" +
                    "</family3>" +
                 "</Root>"; ;

            XElement family = XElement.Parse(xml);

            var results = family.Elements().Select(x => new
            {
                name = x.Name,
                children = x.Descendants("child").Select(y => new
                {
                    age = (int)y.Attribute("age"),
                    dog_name = y.Element("dog-name").Value
                }).OrderByDescending(z => z.age).ToList()
            }).ToList();

            foreach (var family_properties in results)
            {
                Console.WriteLine("Family Name : {0}, Age = {1}, Dog Name = {2}",
                    family_properties.name, family_properties.children.FirstOrDefault().age, family_properties.children.FirstOrDefault().dog_name); 
            }
            Console.ReadLine();
        }
    }
}
​