【发布时间】:2018-06-27 13:59:10
【问题描述】:
我尝试使用 openxml 替换书签的文本。它仅适用于每个段落的第一行和单行。
我的代码:
foreach (BookmarkStart bookMarkStart in wordprocessingDocument.MainDocumentPart.RootElement.Descendants<BookmarkStart>())
{
if (bookMarkStart.Name == "signet")
{
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("teeeest")), bookMarkStart);
}
}
以下是使用这些工具的 xml 文件。这里我有两段,但只有第一个被替换,我用id=0 使用书签,第二个是自动添加的
<w:body>
<w:p w:rsidR="0028616D" w:rsidRDefault="005537D9">
<w:bookmarkStart w:name="signet" w:id="0" />
<w:r>
<w:t>Test1</w:t>
</w:r>
</w:p>
<w:p w:rsidR="005537D9" w:rsidRDefault="005537D9">
<w:r>
<w:t>Test2</w:t>
</w:r>
<w:bookmarkStart w:name="_GoBack" w:id="1" />
<w:bookmarkEnd w:id="0" />
<w:bookmarkEnd w:id="1" />
</w:p>
<w:sectPr w:rsidR="005537D9">
<w:pgSz w:w="11906" w:h="16838" />
<w:pgMar w:top="1417" w:right="1417" w:bottom="1417" w:left="1417" w:header="708" w:footer="708" w:gutter="0" />
<w:cols w:space="708" />
<w:docGrid w:linePitch="360" />
</w:sectPr>
</w:body>
【问题讨论】:
-
能否请您包含相关的 XML,以便我们可以看到书签的所有“部分”(标签)?
-
@CindyMeister 在哪里可以找到 xml 文件?
-
例如,Open XML SDK 生产力工具可以为您提供。真的,我只是对与书签相关的标签感兴趣。书签有一个开始标签和一个结束标签——你需要两者来获取整个内容,以及层次结构中它们周围的内容。书签可能很棘手,这就是为什么内容控件在使用 Open XML 时会更好...
-
@CindyMeister 我添加了 xml 文件,你现在可以看到了吗?
-
其他人可以帮忙吗?
标签: c# asp.net ms-word openxml bookmarks