gpt4 book ai didi

c# - 使用xml删除书签

转载 作者:太空宇宙 更新时间:2023-11-03 11:24:36 25 4
gpt4 key购买 nike

我正在尝试使用 openxml 和 c# 编辑 word 文档。我的文档具有以下 xml 结构:

    <w:bookmarkStart w:name="HelloWorld" w:id="0" />
<w:bookmarkStart w:name="_GoBack" w:id="1" />
<w:r w:rsidRPr="00874DDF">
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" />
<w:b />
<w:bCs />
<w:sz w:val="28" />
<w:szCs w:val="28" />
<w:u w:val="single" />
</w:rPr>
<w:t>Hello World:</w:t>
</w:r>
</w:p>
<w:p w:rsidRPr="00583A84" w:rsidR="00CB71E3" w:rsidP="00CB71E3" w:rsidRDefault="00CB71E3">
<w:pPr>
<w:spacing w:line="260" w:lineRule="atLeast" />
<w:jc w:val="both" />
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" />
<w:color w:val="000000" />
</w:rPr>
</w:pPr>
<w:r w:rsidRPr="00583A84">
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" />
<w:color w:val="000000" />
</w:rPr>
<w:t>HelloWorld.</w:t>
</w:r>
</w:p>
<w:bookmarkEnd w:id="0" />
<w:bookmarkEnd w:id="1" />

我正在尝试删除我的 Word 文档页面中书签中的所有文本。然而,xml 结构使我无法这样做。这是因为书签文本在两个不同的段落父标签之间拆分。如何删除书签开头 0 和书签结尾 0 之间的所有文本?

最佳答案

我正在构建一个小型项目,在我的工作中使用 Word 编辑文本、表格和图形。使用 openXML 这就是我将如何替换书签覆盖的文本。

我不知道您是否涵盖了 bookmarkStart 元素的隔离,所以我也包含了它。

首先是捕获bookmarkStart的代码:

Dictionary<String,BookmarkStart> bookMap = new Dictionary<String, BookmarkStart>(); //a dictionary so we can lookup a bookmarkStart with it's name
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open("MyWordDocument.docx", true))
{
var mainPart = wordDoc.MainDocumentPart; //get mainpart
var bookmarks = mainPart.Document.Body.Descendants<BookmarkStart>(); //get all bookmarks
foreach (BookmarkStart bookmarkStart in bookmarks) //save them to dictionary
{
bookMap[bookmarkStart.Name] = bookmarkStart;
}
ReplaceInBookmark(bookmark["myBookmark"],"text to insert");
}

然后是替换部分:

public  void ReplaceInBookmark(BookmarkStart bookmarkStart, string text)
{
OpenXmlElement elem = bookmarkStart.NextSibling();
while (elem != null && !(elem is BookmarkEnd))
{
OpenXmlElement nextElem = elem.NextSibling();
elem.Remove();
elem = nextElem;
}
bookmarkStart.Parent.InsertAfter<Run>(new Run(new Text(text)), bookmarkStart);
}

我认为,这应该可以完成工作。但它是对一些代码进行了一些小的修改的复制粘贴,我现在不能随意测试,因此可能存在错误/错误。

如果您想要删除书签及其内容(而不是替换它),您可以尝试发送一个空字符串或对方法进行小的更改。这基本上删除了所有元素,然后插入一个带有指定文本的新运行。

祝你好运!

关于c# - 使用xml删除书签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9829363/

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