删除保留子节点的XML父节点(ReportSections和ReportSection)

时间:2019-02-14 02:11:11

标签: xml reporting-services

使用VS2015或更高版本编辑SSRS报表时,生成的XML与Reporting Services 2012不兼容。我们需要做几处修改。我正在尝试编写一个可以通过编程实现此目的的脚本。

我得到了替换xmlns定义的代码和删除了整个节点的代码。

我不知道如何删除和保留孩子。 (使用C#)

<ReportSections>
  <ReportSection>
    <Body></Body>
    <Width></Width>
    ...
  </ReportSection>
</ReportSection>



//THIS CODE DOES NOT WORK
//Remove <ReportSections></ReportSections>  <ReportSection>/<ReportSection>
foreach (XmlNode child in rnode.ChildNodes)
{
    if(child.Name.Equals("ReportSections", 
       StringComparison.InvariantCultureIgnoreCase))
    {
        child.ParentNode.AppendChild(child);
    }
        child.ParentNode.RemoveChild(child);
}

这是我编写的要删除的代码,包括子代码。

//Remove <ReportParameters>...</ReportParameters> and all its content
foreach (XmlNode xNode in rnode.ChildNodes)
{
    if (xNode.Name.Equals("ReportParameters", StringComparison.InvariantCultureIgnoreCase))
    {
       xNode.ParentNode.RemoveChild(xNode);
    }
}

1 个答案:

答案 0 :(得分:0)

这是我的工作解决方案

//Remove <ReportSections></ReportSections>  <ReportSection>/<ReportSection>
                foreach (XmlNode rootChild in rnode.ChildNodes)
                {
                    if (rootChild.Name.Equals("ReportSections", StringComparison.InvariantCultureIgnoreCase))
                    {
                        foreach (XmlNode reportSectionsChild in rootChild.ChildNodes)
                        {
                            if (reportSectionsChild.Name.Equals("ReportSection", StringComparison.InvariantCultureIgnoreCase))
                            {
                                foreach(XmlNode reportSectionChild in reportSectionsChild.ChildNodes)
                                {
                                    reportSectionChildren.Add(reportSectionChild);
                                } 
                            }
                        }

                        rootChild.ParentNode.RemoveChild(rootChild);
                    }

                }

                foreach (var child in reportSectionChildren)
                {
                    rnode.AppendChild(child);
                }