【问题标题】:change xmlelement name using linq to xml使用 linq 将 xmlelement 名称更改为 xml
【发布时间】:2016-07-20 04:15:33
【问题描述】:

程序员朋友们好。

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

我不想使用 xslt,这就是为什么我要在 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>

它的作用是删除标签,但其内容仍保留在其位置

这是我的 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);
        }

所以我只需要删除节点的代码。谢谢你。

【问题讨论】:

  • 尝试:el.ReplaceWith(el.Value);
  • 是的,我试过了。但如果我使用该代码,它会给我错误消息:对象引用未设置为对象的实例。并且光标在“in”
  • 要删除的标签必须为空。我通常使用: List tagsToremove = root.Descendants("Tags").ToList();

标签: c# xml linq


【解决方案1】:

我建议将内容复制到父元素并使用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

【讨论】:

    【解决方案2】:

    你可以这样做:

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-17
      • 1970-01-01
      • 2023-03-02
      • 1970-01-01
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多