gpt4 book ai didi

c# - 如何删除空段落元素?

转载 作者:行者123 更新时间:2023-12-04 00:43:57 25 4
gpt4 key购买 nike

我正在尝试删除包含 "{Some Text}" 的段落.下面的方法就是这样做的,但我注意到在我删除段落之后,还剩下空的段落元素。

如何删除 <w:p />以编程方式添加元素?

下面是我最初用来删除段落的内容。

 using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(file, true))
{
MainDocumentPart mainPart = wordDoc.MainDocumentPart;
Document D = mainPart.Document;

foreach (Paragraph P in D.Descendants<Paragraph>())
{
if (P.InnerText.Contains("{SomeText}"))
{
P.RemoveAllChildren();
//P.Remove(); //doesn't remove
}
}
D.Save();
}

这是 document.xml 后记的样子:

<w:p />
<w:p />
<w:p />
<w:p />
<w:p />
<w:p />
<w:p />

最佳答案

这里的问题:

        foreach (Paragraph P in D.Descendants<Paragraph>())
{
if (P.InnerText.Contains("{SomeText}"))
{
P.Remove(); //doesn't remove
}
}

您是否正在尝试从集合中删除一个项目,同时您仍在迭代它。由于某些奇怪的原因,OpenXML SDK 实际上并没有在这里抛出异常,它只是默默地退出了 foreach。环形。附加调试器并逐步执行将向您展示这一点。修复很简单:

        foreach (Paragraph P in D.Descendants<Paragraph>().ToList())
{
if (P.InnerText.Contains("{SomeText}"))
{
P.Remove(); //will now remove
}
}

通过添加 ToList()您正在将段落复制(浅复制)到单独的列表并遍历该列表。现在,当您删除一个段落时,它会从 D.Descendants<Paragraph>() 中删除。收集,但不是来自您的列表,迭代将继续。

关于c# - 如何删除空段落元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22234453/

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