我需要基于一些唯一的ID或可以识别/区分50-60页word文档中的每个段落的内容(使用TX Text Editor加载它)来提取段落。我将这些唯一标识标记到列表框或其他列表控件上,然后单击列表框项目,转到该特定段落并突出显示它。我以为w:paraID是唯一的,但它为null,而不是出于开发目的。应该有一些自定义技巧,可以在其中添加一些内容。
现在,我将TxText编辑器加载的内容转换为docx-> wordprocessingML,并试图弄清楚如何使用某些唯一的ID或样式提取某些段落。段落的内容未知,只有列表项和Docx之间的某些映射会突出显示整个段落。
关于, 贾斯比尔
答案 0 :(得分:0)
有多种方法可以做到这一点。最好的方法取决于具体情况。
您可以通过每个段落的位置索引来对其进行寻址。如果您的文档包含N
个段落,则第一个将在索引0
处,最后一个将在索引N-1
处。此解决方案不需要任何标记。
如果可以预处理Word文档,则可以添加“ 永久”或“ 可忽略”标记来唯一标识每个段落:>
“ 永久”标记表示Microsoft Word将不会删除的标记。至少有两种解决方案:
您可以在段落周围添加w:bookmarkStart
和w:bookmarkEnd
元素(使用BookmarkStart
和BookmarkEnd
实例)。 w:name
元素的w:bookmarkStart
属性可以用作您的唯一ID。
您可以将每个w:p
元素(Paragraph
实例)括在w:sdt
(块级结构化文档标签)元素中。一个w:sdt
元素(SdtBlock
实例)可以具有一个w:sdtPr
子元素(SdtProperties
实例),该子元素可以具有一个w:tag
子元素({{1} }实例)。 Tag
元素的w:val
属性值可以用作您的唯一ID。
“ 不可忽略”标记表示如果打开并重新保存文档,Microsoft Word可以删除该标记。例如,您可以定义自己的XML命名空间,在w:tag
根元素(w:document
实例)中声明,然后将其添加到Document
命名空间前缀列表中。然后,您可以将以名称空间为前缀的属性添加到mc:Ignorable
元素(w:p
实例)中。您的属性值可以是唯一ID。
因此,假设您有以下文档(带有简化的标记):
Paragraph
使用<?xml version="1.0" encoding="utf-8"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p>
<w:r>
<w:t xml:space="preserve">First paragraph.</w:t>
</w:r>
</w:p>
<w:p>
<w:r>
<w:t xml:space="preserve">Second paragraph.</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
和w:bookmarkStart
元素,您标记的文档如下所示:
w:bookmarkEnd
使用<?xml version="1.0" encoding="utf-8"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:bookmarkStart w:id="1" w:name="UniqueId_1" />
<w:p>
<w:r>
<w:t xml:space="preserve">First paragraph.</w:t>
</w:r>
</w:p>
<w:bookmarkEnd w:id="1" />
<w:bookmarkStart w:id="2" w:name="UniqueId_2" />
<w:p>
<w:r>
<w:t xml:space="preserve">Second paragraph.</w:t>
</w:r>
</w:p>
<w:bookmarkEnd w:id="2" />
</w:body>
</w:document>
元素,您的文档将如下所示:
w:sdt
最后,使用可忽略的标记,您的文档应如下所示:
<?xml version="1.0" encoding="utf-8"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:sdt>
<w:sdtPr>
<w:tag w:val="UniqueId_1" />
</w:sdtPr>
<w:sdtContent>
<w:p>
<w:r>
<w:t xml:space="preserve">First paragraph.</w:t>
</w:r>
</w:p>
</w:sdtContent>
</w:sdt>
<w:sdt>
<w:sdtPr>
<w:tag w:val="UniqueId_2" />
</w:sdtPr>
<w:sdtContent>
<w:p>
<w:r>
<w:t xml:space="preserve">Second paragraph.</w:t>
</w:r>
</w:p>
</w:sdtContent>
</w:sdt>
</w:body>
</w:document>
使用段落索引将是最直接的解决方案。接下来,添加可忽略的标记每个段落仅需要一个附加属性。但是,如果您使用Microsoft Word打开并保存文档,此属性将无法生存。接下来,对于最终用户来说,书签是一种非侵入性的解决方案。但是,书签更难处理。最后,<?xml version="1.0" encoding="utf-8"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:my="http://my.domain.com/some/url/for/my/namespace"
mc:Ignorable="my">
<w:body>
<w:p my:uniqueId="UniqueId_1">
<w:r>
<w:t xml:space="preserve">First paragraph.</w:t>
</w:r>
</w:p>
<w:p my:uniqueId="UniqueId_2">
<w:r>
<w:t xml:space="preserve">Second paragraph.</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
元素很容易在纯功能转换中创建,并且以后很容易处理。但是,如果您希望最终用户继续使用Word文档,它们可能会妨碍最终用户的使用。