Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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
C# 使用XmlReader获取最后一个子元素_C#_Xml - Fatal编程技术网

C# 使用XmlReader获取最后一个子元素

C# 使用XmlReader获取最后一个子元素,c#,xml,C#,Xml,假设我有这个XML: <fields> <field fieldid="fdtElem3Group"> <value actionid="1" actiontype="review">123456789</value> <value actionid="2" actiontype="review">123456789</value> <val

假设我有这个XML:

 <fields>
        <field fieldid="fdtElem3Group">
          <value actionid="1" actiontype="review">123456789</value>
          <value actionid="2" actiontype="review">123456789</value>
          <value actionid="3" actiontype="review">123456789</value>
          <value actionid="4" actiontype="review">123456789</value>
          <value actionid="5" actiontype="review">123456789</value>
        </field>
        <field fieldid="fdtElem7Group">
          <value actionid="1" actiontype="review">29/10/75</value>
          <value actionid="2" actiontype="review">29/10/74</value>
          <value actionid="3" actiontype="review">29/10/74</value>
          <value actionid="4" actiontype="review">29/10/76</value>
          <value actionid="5" actiontype="review">29/10/74</value>
        </field>
      </fields>

抱歉,现在请阅读您正在寻找的xmReader解决方案。但是使用XDocument和Linq,您可以执行以下操作:

string xml = @"<fields>
        <field fieldid=""fdtElem3Group"">
          <value actionid=""1"" actiontype=""review"">123456789</value>
          <value actionid=""2"" actiontype=""review"">123456789</value>
          <value actionid=""3"" actiontype=""review"">123456789</value>
          <value actionid=""4"" actiontype=""review"">123456789</value>
          <value actionid=""5"" actiontype=""review"">123456789</value>
        </field>
        <field fieldid=""fdtElem7Group"">
          <value actionid=""1"" actiontype=""review"">29/10/75</value>
          <value actionid=""2"" actiontype=""review"">29/10/74</value>
          <value actionid=""3"" actiontype=""review"">29/10/74</value>
          <value actionid=""4"" actiontype=""review"">29/10/76</value>
          <value actionid=""5"" actiontype=""review"">29/10/74</value>
        </field>
      </fields>";



var xmlDoc = XDocument.Parse(xml).Root;
var lastElements = xmlDoc.Descendants("field").Select(x => x.LastNode);
stringxml=@”
123456789
123456789
123456789
123456789
123456789
29/10/75
29/10/74
29/10/74
29/10/76
29/10/74
";
var xmlDoc=XDocument.Parse(xml).Root;
var lastElements=xmlDoc.substands(“字段”).Select(x=>x.LastNode);

对不起,现在请阅读您正在寻找的xmReader解决方案。但是使用XDocument和Linq,您可以执行以下操作:

string xml = @"<fields>
        <field fieldid=""fdtElem3Group"">
          <value actionid=""1"" actiontype=""review"">123456789</value>
          <value actionid=""2"" actiontype=""review"">123456789</value>
          <value actionid=""3"" actiontype=""review"">123456789</value>
          <value actionid=""4"" actiontype=""review"">123456789</value>
          <value actionid=""5"" actiontype=""review"">123456789</value>
        </field>
        <field fieldid=""fdtElem7Group"">
          <value actionid=""1"" actiontype=""review"">29/10/75</value>
          <value actionid=""2"" actiontype=""review"">29/10/74</value>
          <value actionid=""3"" actiontype=""review"">29/10/74</value>
          <value actionid=""4"" actiontype=""review"">29/10/76</value>
          <value actionid=""5"" actiontype=""review"">29/10/74</value>
        </field>
      </fields>";



var xmlDoc = XDocument.Parse(xml).Root;
var lastElements = xmlDoc.Descendants("field").Select(x => x.LastNode);
stringxml=@”
123456789
123456789
123456789
123456789
123456789
29/10/75
29/10/74
29/10/74
29/10/76
29/10/74
";
var xmlDoc=XDocument.Parse(xml).Root;
var lastElements=xmlDoc.substands(“字段”).Select(x=>x.LastNode);
希望这有帮助

static void Main(string[] args)
        {
            string xml = @"<fields><field fieldid='fdtElem3Group'><value actionid='1' actiontype='review'>123456789</value><value actionid='2' actiontype='review'>123456789</value><value actionid='3' actiontype='review'>123456789</value><value actionid='4' actiontype='review'>123456789</value><value actionid='5' actiontype='review'>123456789</value></field><field fieldid='fdtElem7Group'><value actionid='1' actiontype='review'>29/10/75</value>          <value actionid='2' actiontype='review'>29/10/74</value><value actionid='3' actiontype='review'>29/10/74</value><value actionid='4' actiontype='review'>29/10/76</value><value actionid='5' actiontype='review'>29/10/74</value></field></fields>";
            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.LoadXml(xml);
            foreach (XmlNode item in xmlDocument.DocumentElement.ChildNodes)
            {
                Console.WriteLine(item.LastChild.InnerXml);
            }            
            Console.ReadKey();
        }
static void Main(字符串[]args)
{
字符串xml=@“12345678912345678912345678912345678912345678929/10/7529/10/7429/10/7429/10/7629/10/74”;
XmlDocument XmlDocument=新的XmlDocument();
LoadXml(xml);
foreach(xmlDocument.DocumentElement.ChildNodes中的XmlNode项)
{
WriteLine(item.LastChild.InnerXml);
}            
Console.ReadKey();
}
希望这有帮助

static void Main(string[] args)
        {
            string xml = @"<fields><field fieldid='fdtElem3Group'><value actionid='1' actiontype='review'>123456789</value><value actionid='2' actiontype='review'>123456789</value><value actionid='3' actiontype='review'>123456789</value><value actionid='4' actiontype='review'>123456789</value><value actionid='5' actiontype='review'>123456789</value></field><field fieldid='fdtElem7Group'><value actionid='1' actiontype='review'>29/10/75</value>          <value actionid='2' actiontype='review'>29/10/74</value><value actionid='3' actiontype='review'>29/10/74</value><value actionid='4' actiontype='review'>29/10/76</value><value actionid='5' actiontype='review'>29/10/74</value></field></fields>";
            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.LoadXml(xml);
            foreach (XmlNode item in xmlDocument.DocumentElement.ChildNodes)
            {
                Console.WriteLine(item.LastChild.InnerXml);
            }            
            Console.ReadKey();
        }
static void Main(字符串[]args)
{
字符串xml=@“12345678912345678912345678912345678912345678929/10/7529/10/7429/10/7429/10/7629/10/74”;
XmlDocument XmlDocument=新的XmlDocument();
LoadXml(xml);
foreach(xmlDocument.DocumentElement.ChildNodes中的XmlNode项)
{
WriteLine(item.LastChild.InnerXml);
}            
Console.ReadKey();
}

如果不想将整个XML加载到XML文件中(例如,它非常大),可以采用混合方法,使用
XmlReader
迭代XML文件中的
元素,将每个
元素加载到
XElement
,然后选择每个父级的最后一个
。无论XML文件增长多大,这都可以保持内存占用小且恒定

首先介绍以下两种扩展方法:

public static class XmlReaderExtensions
{
    public static IEnumerable<IEnumerable<XElement>> ReadNestedElements(this XmlReader xmlReader, string outerName, string innerName)
    {
        while (!xmlReader.EOF)
        {
            if (xmlReader.NodeType == System.Xml.XmlNodeType.Element && xmlReader.Name == outerName)
            {
                using (var subReader = xmlReader.ReadSubtree())
                {
                    yield return subReader.ReadElements(innerName);
                }
            }
            xmlReader.Read();
        }
    }

    public static IEnumerable<XElement> ReadElements(this XmlReader xmlReader, string name)
    {
        while (!xmlReader.EOF)
        {
            if (xmlReader.NodeType == System.Xml.XmlNodeType.Element && xmlReader.Name == name)
            {
                var element = (XElement)XNode.ReadFrom(xmlReader);
                yield return element;
            }
            else
            {
                xmlReader.Read();
            }
        }
    }
}

示例。

如果不想将整个XML加载到XML文件中(例如,因为它非常大),可以采用混合方法,使用
XmlReader
迭代XML文件中的
元素,将每个
元素加载到
XElement
,然后选择每个父级的最后一个
。无论XML文件增长多大,这都可以保持内存占用小且恒定

首先介绍以下两种扩展方法:

public static class XmlReaderExtensions
{
    public static IEnumerable<IEnumerable<XElement>> ReadNestedElements(this XmlReader xmlReader, string outerName, string innerName)
    {
        while (!xmlReader.EOF)
        {
            if (xmlReader.NodeType == System.Xml.XmlNodeType.Element && xmlReader.Name == outerName)
            {
                using (var subReader = xmlReader.ReadSubtree())
                {
                    yield return subReader.ReadElements(innerName);
                }
            }
            xmlReader.Read();
        }
    }

    public static IEnumerable<XElement> ReadElements(this XmlReader xmlReader, string name)
    {
        while (!xmlReader.EOF)
        {
            if (xmlReader.NodeType == System.Xml.XmlNodeType.Element && xmlReader.Name == name)
            {
                var element = (XElement)XNode.ReadFrom(xmlReader);
                yield return element;
            }
            else
            {
                xmlReader.Read();
            }
        }
    }
}

示例。

为什么不使用
XDocument
和一些XPath?为什么不使用
XDocument
和一些XPath?IMHO比目前在.Net中可用的任何东西都强大得多。IMHO比目前在.Net中可用的任何东西都强大得多。