【问题标题】:Get the EndElement Node of an XElement获取 XElement 的 EndElement 节点
【发布时间】:2016-10-16 13:01:57
【问题描述】:

我正在尝试在 C# 控制台应用程序中获取 XElement 的 End 节点。

比如说我的 XML 内容是:

<Object>
  <Item>Word</Item>
  <Value>10</Value>
</Object>

如何获取&lt;/Object&gt; 作为节点?

在遍历element.DescendantNodesAndSelf() 时,我仍然看不到孤立的&lt;/Object&gt; 节点。

static void Main(string[] args)
{
    const string xmlString = "<Object><Item>Word</Item><Value>10</Value></Object>";
    var element = XElement.Parse(xmlString);
    foreach (var node in element.DescendantNodesAndSelf())
    {
        Console.WriteLine($"{node}");
    }
    Console.ReadLine();
}

【问题讨论】:

  • 我可能弄错了,但是,AFAIK,元素标记的结尾不被视为 XML 中的节点,因此在 LINQ to XML 对象模型中没有表示它。但是,你为什么需要这个?你想达到什么目标?
  • @PetSerAl 有“XmlNodeType.EndElement”我想知道这是否是我正在寻找的 NodeType。我需要获取该节点以对 XML 内容执行自定义缩进。
  • 正如我所见,XmlNodeType.EndElement 用于 XmlReader 表示 XML 流中的结束标记,但 XML DOM 和 LINQ to XML 都没有在其内存对象模型中使用它。

标签: c# xml xelement


【解决方案1】:

我通常会做以下事情。 ReadFrom 将读取结束元素。

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            const string xmlString = "<Object><Item>Word</Item><Value>10</Value></Object>";
            StringReader sReader = new StringReader(xmlString);
            XmlReader xReader = XmlReader.Create(sReader);
            while (!xReader.EOF)
            {
                if (xReader.Name != "Object")
                {
                    xReader.ReadToFollowing("Object");
                }
                if (!xReader.EOF)
                {
                    XElement _object = (XElement)XElement.ReadFrom(xReader);
                }
            }


        }
    }
}

【讨论】:

  • 谢谢,但我需要在不切换到 XmlReader 的情况下维护 XElement,因为 XElement 是另一个 XDocument 的一部分,我对 XElement 所做的任何更改都必须反映在 XDocument 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 2011-05-15
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多