【问题标题】:Remove parent from the XElement [closed]从 XElement 中删除父级 [关闭]
【发布时间】:2012-07-12 22:02:26
【问题描述】:

如何从xml“Tickets”中删除父标签,剩下的节点应该在那里

<Tickets>
    <Extract_Date>2011-02-25 00:00:00</Extract_Date>
    <Ticket>
        <Ticket_Number>INC000000578057</Ticket_Number>
        <Status>
            <Value>Cancelled</Value>
            <Reason>Cancelled by user</Reason>
        </Status>
    </Ticket>
</Tickets>

【问题讨论】:

  • 用记事本删除?由于 标签没有关闭,这不是有效的 xml 文件...
  • 你想做什么?所有 XML 文档都需要有一个包含所有其他元素的单个根元素,才能被视为有效的 XML。在本例中,&lt;Tickets&gt;&lt;/Tickets&gt; 就是那个元素。
  • 对不起,你能告诉我怎么做吗?
  • 想要移除父 ,链接看起来像是移除了子节点
  • 你想对孩子们做什么?最终它们需要成为一个特定根节点的子节点。

标签: c# xml xelement


【解决方案1】:

XElement.Elements() 方法返回元素的所有子元素。

IEnumerable<XElement> GetElementsWithoutParent(XElement element)
{
    return element.Elements();
}

当然,如果你可以直接调用.Elements() 方法,这样的方法会很傻,但它说明了这一点。

请记住,您不再拥有XElement,而是拥有XElement 集合。您不能再通过简单地调用.ToString() 来获得XML 表示。要获取 XML,您需要使用 StringBuilder 并附加每个单独的元素。并且它不能表示没有根节点的 XML 文档。

【讨论】:

  • return element.Elements();它只是返回null,不知道为什么会这样
  • @Gani - 请在您的问题中包含您的 C# 代码。
  • 我必须在没有父级的情况下序列化 xml,否则反序列化时会引发错误
  • @Gani - 请在您的问题中包含您的 C# 代码。点击问题下方的“编辑”,然后添加一些 C# 代码并保存更改。
【解决方案2】:

想要序列化其他节点并将其保存到数据库,同时反序列化动态添加父节点

XElement newRoot = ........
newRoot.Add(orgXDoc.Element("Tickets").Elements());

【讨论】:

  • 想去掉根标签不加
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多