gpt4 book ai didi

c# - 从 XML 中去除标 checkout 现

转载 作者:数据小太阳 更新时间:2023-10-29 02:55:37 26 4
gpt4 key购买 nike

我想去掉特定标记的出现,保持内部 XML 完好无损。我想一次完成(而不是搜索、替换并再次从头开始)。例如,来自源:

<element>
<RemovalTarget Attribute="Something">
Content Here
</RemovalTarget>
</element>
<element>
More Here
</element>

我希望结果是:

<element>
Content Here
</element>
<element>
More Here
</element>

我试过这样的事情(原谅我,我是 Linq 的新手):

var elements = from element in doc.Descendants()
where element.Name.LocalName == "RemovalTarget"
select element;

foreach (var element in elements) {
element.AddAfterSelf(element.Value);
element.Remove();
}

但是在第二次循环中我得到一个空引用,大概是因为集合因更改而失效。在可能很大的文档上删除这些标签的有效方法是什么?

最佳答案

您必须通过调用 ToList 来跳过延迟执行,这可能不会影响您在大型文档中的性能,因为您将以比原始文件低得多的大 O 进行迭代和替换搜索。正如@jacob_c 指出的那样,我应该使用 element.Nodes() 来正确替换它,并且正如@Panos 指出的那样,我应该反转列表以便准确处理嵌套替换。

此外,使用 XElement.ReplaceWith ,比您当前在大型文档中的方法快得多:

var elements = doc.Descendants("RemovalTarget").ToList().Reverse();
/* reverse on the IList<T> may be faster than Reverse on the IEnumerable<T>,
* needs benchmarking, but can't be any slower
*/

foreach (var element in elements) {
element.ReplaceWith(element.Nodes());
}

最后一点,在回顾这可能用于什么时,我倾向于同意@Trull 的观点,即 XSLT 可能是您真正要寻找的东西,如果说您要从文档中删除所有 say 标签.否则,请享受这个相当不错且性能相当出色的 LINQ to XML 实现。

关于c# - 从 XML 中去除标 checkout 现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/259883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com