使用linq更改xmlelement名称到xml

时间:2016-07-20 04:15:33

标签: c# xml linq

美好的一天同事们。

我的团队负责人给了我一个任务,我需要将xml文件转换为html5

我不想使用xslt,这就是为什么我要在c#的帮助下使用c# 的system.xml。

但我对LINQ和c#

是新手

具体来说:我要做的是删除带有TAGS名称的元素。

这是我的xml文件

<Root>
    <Paragraph>
        <Tags>
            Just some text
        </Tags>
    </Paragraph>
    <AnotherTag>
        <Paragraph>
            <Tags>
            Another Text
            </Tags>
        </Paragraph>
    </AnotherTag>
</Root>

,可能的输出是:

<Root>
    <Paragraph>

            Just some text

    </Paragraph>
    <AnotherTag>
        <Paragraph>

            Another Text

        </Paragraph>
    </AnotherTag>
</Root>

它的作用是移除TAGS,但其内容保持在其位置

这是我的c#代码:

XElement root = XElement.Load("myxml.xml");
        IEnumerable<XElement> tagsToremove =
            from el in root.Descendants("Tags")
            select el;
        foreach (XElement el in tagsToremove)
        {
            Console.WriteLine(el);
        }

所以我需要的是仅删除节点的代码。谢谢。

2 个答案:

答案 0 :(得分:0)

我建议将内容复制到父元素,并使用XElement.Remove方法删除元素。

    XDocument doc = XDocument.Load(filepath);

    var elements = doc.Descendants("Tags");

    foreach(var element in elements)
    {
        var content  = (string)element.Value;
        var parent = element.Parent;            

        element.Remove();
        parent.Add(content);        

    }

选中此Demo

答案 1 :(得分:0)

你可以这样做:

var doc = XDocument.Load(pathToFile);
foreach (var tag in doc.Descendants("Tags").ToList())
    tag.ReplaceWith((string)tag);

请注意那里的ToList()电话。您正在循环中修改文档,因此您需要首先收集要替换的所有标记。