【问题标题】:Removing parent node from xml collections从 xml 集合中删除父节点
【发布时间】:2016-09-28 10:12:24
【问题描述】:

我正在尝试摆脱 xml 中集合的父节点(使用 linq-to-xml):

例如输入xml:

<envelop>
<books>
    <book>
       <title>ABC</title>
       <publishedDate>2012-12-12</publishedDate>
       <authors>
           <author>John Smith</author>
           <author>Bob Doe</author>
       </authors>
    <book>
    <book>
       <title>XYZ</title>
       <publishedDate>2013-03-06</publishedDate>
       <authors>
           <author>Henry Blah</author>
           <author>Bob Doe</author>
       </authors>
    <book>
</books>
</envelop>

我希望结果是:

<envelop>

    <book>
       <title>ABC</title>
       <publishedDate>2012-12-12</publishedDate>
       <author>John Smith</author>
       <author>Bob Doe</author>
    <book>
    <book>
       <title>XYZ</title>
       <publishedDate>2013-03-06</publishedDate>
       <author>Henry Blah</author>
       <author>Bob Doe</author>
    <book>
</envelop>

节点:&lt;books&gt;&lt;authors&gt; 消失了 - 只剩下它们的子节点。

我看到了以下问题,但使用 XSLT (Remove parent nodes from xml with xslt)。目前想远离 XSLT。

【问题讨论】:

  • 如果 books 是根元素并且您希望输出为 XML,那么我认为您不能。

标签: c# xml linq linq-to-xml


【解决方案1】:
        var document = XDocument.Load(validXmlFilePath);
        while (document.Descendants("authors").Any())
        {
            var x = document.Descendants("authors").First();
            x.AddAfterSelf(x.Nodes());
            x.Remove();
        }
        var result = document.Descendants("book");

【讨论】:

    【解决方案2】:

    在 VB 中代码是

        Dim result As XElement = <envelop></envelop>
    
        result.Add(xe...<book>)
    
        For Each el As XElement In result...<author>.ToList
            el.Parent.Parent.Add(New XElement(el))
        Next
    
        result...<authors>.Remove()
    

    xe 定义为

        Dim xe As XElement
        'to load from a file
        '  xe = XElement.Load("Your Path Here")
    
        ' for testing
        xe = <envelop>
                 <books>
                     <book>
                         <title>ABC</title>
                         <publishedDate>2012-12-12</publishedDate>
                         <authors>
                             <author>John Smith</author>
                             <author>Bob Doe</author>
                         </authors>
                     </book>
                     <book>
                         <title>XYZ</title>
                         <publishedDate>2013-03-06</publishedDate>
                         <authors>
                             <author>Henry Blah</author>
                             <author>Bob Doe</author>
                         </authors>
                     </book>
                 </books>
             </envelop>
    

    结果看起来像

    <envelop>
      <book>
        <title>ABC</title>
        <publishedDate>2012-12-12</publishedDate>
        <author>John Smith</author>
        <author>Bob Doe</author>
      </book>
      <book>
        <title>XYZ</title>
        <publishedDate>2013-03-06</publishedDate>
        <author>Henry Blah</author>
        <author>Bob Doe</author>
      </book>
    </envelop>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多