【问题标题】:How do I create an xmlElement from the current node of a xmlReader?如何从 xmlReader 的当前节点创建 xmlElement?
【发布时间】:2008-11-12 15:20:01
【问题描述】:

如果我有一个 xmlreader 实例,我如何使用它来读取其当前节点并最终得到一个 xmlElement 实例?

【问题讨论】:

  • 你真的想要 XmlElement,而不是 XElement?

标签: c# .net xml


【解决方案1】:

未测试,但如何通过XmlDocument

    XmlDocument doc = new XmlDocument();
    doc.Load(reader);
    XmlElement el = doc.DocumentElement;

或者(从现在开始),例如:

    doc.LoadXml(reader.ReadOuterXml());

但实际上我不喜欢这样...它无缘无故地强制执行额外的 xml-parse 步骤(CPU 成本更高的操作之一)。如果原件有问题,那么也许考虑一个子阅读器:

    using (XmlReader subReader = reader.ReadSubtree())
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(subReader);
        XmlElement el = doc.DocumentElement;
    }

【讨论】:

  • 将第 2 行更改为 doc.LoadXml(reader.ReadOuterXml());所以我可以接受。谢谢。
  • 这如何回答这个问题?这会将整个 xml 读入 XmlDocument,并且只返回根元素。
  • @Sunny;根元素包含所有其他元素作为后代
【解决方案2】:

假设你有 XmlDocument,你需要在其中附加新创建的 XmlElement:

XmlElement myElement;
myXmlReader.Read();
if (myXmlReader.NodeType == XmlNodeType.Element)
{
   myElement = doc.CreateElement(myXmlReader.Name);
   myElement.InnerXml = myXmlReader.InnerXml;
}

来自docs:不要直接实例化一个XmlElement;而是使用 CreateElement 等方法。

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 2016-03-13
    • 2011-04-28
    • 2013-09-17
    相关资源
    最近更新 更多