Заменить текст на trackchange, который присутствует внутри элемента гиперссылки — Docx4j

#docx4j

#docx4j

Вопрос:

Я пытаюсь заменить текст на trackchange, который присутствует внутри элемента гиперссылки. Я использую закладку replacetext_2_0 для поиска значения. Я попробовал пару логик, но не получил ожидаемого результата. Кто-нибудь может помочь мне решить эту проблему. Пространство имен, которое я пробовал, приведено ниже:

 1. <w:hyperlink r:id="" ((Hyperlink) temp).getId() "" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">

2. <w:hyperlink r:id="" ((Hyperlink) temp).getId() "" xmlns:dsp="http://schemas.microsoft.com/office/drawing/2008/diagram" xmlns:cppr="http://schemas.microsoft.com/office/2006/coverPageProps" xmlns:odx="http://opendope.org/xpaths" xmlns:c14="http://schemas.microsoft.com/office/drawing/2007/8/2/chart" xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" xmlns:odgm="http://opendope.org/SmartArt/DataHierarchy" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:dgm="http://schemas.openxmlformats.org/drawingml/2006/diagram" xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture" xmlns:we="http://schemas.microsoft.com/office/webextensions/webextension/2010/11" xmlns:pvml="urn:schemas-microsoft-com:office:powerpoint" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:sl="http://schemas.openxmlformats.org/schemaLibrary/2006/main" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:comp="http://schemas.openxmlformats.org/drawingml/2006/compatibility" xmlns:b="http://schemas.openxmlformats.org/officeDocument/2006/bibliography" xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:xvml="urn:schemas-microsoft-com:office:excel" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:oda="http://opendope.org/answers" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:odc="http://opendope.org/conditions" xmlns:cdr="http://schemas.openxmlformats.org/drawingml/2006/chartDrawing" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:odi="http://opendope.org/components" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:lc="http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas" xmlns:odq="http://opendope.org/questions" xmlns:wetp="http://schemas.microsoft.com/office/webextensions/taskpanes/2010/11" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid">
 

Полученная ниже ошибка даже после добавления пространства имен.

Трассировка стека:

 [org.docx4j.XmlUtils$LoggingErrorListener:main:1554] - The prefix "w" for element "w:hyperlink" is not bound.
; Line#: 1; Column#: 26
javax.xml.transform.TransformerException: The prefix "w" for element "w:hyperlink" is not bound.
 

Найти значение: возраст 18 лет

Замените значение: возраст 18 лет

Пример ввода:

      <w:p>
        <w:pPr>
            <w:pStyle w:val="ChapterTitle"/>
            <w:spacing w:before="0" w:after="0"/>
            <w:jc w:val="both"/>
            <w:rPr>
                <w:rStyle w:val="Heading1Char"/>
                <w:rFonts w:cs="Arial"/>
                <w:b w:val="false"/>
                <w:bCs w:val="false"/>
                <w:color w:val="000000" w:themeColor="text1"/>
                <w:sz w:val="22"/>
                <w:szCs w:val="22"/>
                <w:lang w:val="en-CA"/>
            </w:rPr>
        </w:pPr>
        <w:bookmarkStart w:name="para10000" w:id="10000"/>
        <w:r>
            <w:rPr>
                <w:rStyle w:val="Heading1Char"/>
                <w:rFonts w:cs="Arial"/>
                <w:b w:val="false"/>
                <w:bCs w:val="false"/>
                <w:color w:val="000000" w:themeColor="text1"/>
                <w:sz w:val="22"/>
                <w:szCs w:val="22"/>
                <w:lang w:val="en-CA"/>
            </w:rPr>
            <w:t xml:space="preserve">Some Text. </w:t>
        </w:r>
        <w:hyperlink r:id="rId2">
            <w:bookmarkStart w:name="replacetext_2_0" w:id="0"/>
            <w:r>
                <w:rPr>
                    <w:rStyle w:val="Heading1Char"/>
                    <w:rFonts w:cs="Arial"/>
                    <w:b w:val="false"/>
                    <w:bCs w:val="false"/>
                    <w:color w:val="000000" w:themeColor="text1"/>
                    <w:sz w:val="22"/>
                    <w:szCs w:val="22"/>
                    <w:lang w:val="en-CA"/>
                </w:rPr>
                <w:t xml:space="preserve">Age of 18 years</w:t>
            </w:r>
            <w:bookmarkEnd w:id="0"/>
            <w:r>
                <w:rPr>
                    <w:rStyle w:val="Heading1Char"/>
                    <w:rFonts w:cs="Arial"/>
                    <w:b w:val="false"/>
                    <w:bCs w:val="false"/>
                    <w:color w:val="000000" w:themeColor="text1"/>
                    <w:sz w:val="22"/>
                    <w:szCs w:val="22"/>
                    <w:lang w:val="en-CA"/>
                </w:rPr>
                <w:t xml:space="preserve">.</w:t>
            </w:r>
        </w:hyperlink>
        <w:r>
            <w:rPr>
                <w:rStyle w:val="Heading1Char"/>
                <w:rFonts w:cs="Arial"/>
                <w:b w:val="false"/>
                <w:bCs w:val="false"/>
                <w:color w:val="000000" w:themeColor="text1"/>
                <w:sz w:val="22"/>
                <w:szCs w:val="22"/>
                <w:lang w:val="en-CA"/>
            </w:rPr>
            <w:t xml:space="preserve"> Some text</w:t>
        </w:r>
        <w:bookmarkEnd w:id="10000"/>
    </w:p>
 

Ожидаемый результат:

 <w:p>
<w:pPr>
    <w:pStyle w:val="ChapterTitle"/>
    <w:spacing w:before="0" w:after="0"/>
    <w:jc w:val="both"/>
    <w:rPr></w:rPr>
</w:pPr>
<w:bookmarkStart w:id="0" w:name="para10000"/>
<w:r>
    <w:rPr>
        <w:rStyle w:val="Heading1Char"/>
        <w:rFonts w:cs="Arial"/>
        <w:b w:val="false"/>
        <w:bCs w:val="false"/>
        <w:color w:val="000000" w:themeColor="text1"/>
        <w:sz w:val="22"/>
        <w:szCs w:val="22"/>
        <w:lang w:val="en-CA"/>
    </w:rPr>
    <w:t xml:space="preserve">Some Text. </w:t>
</w:r>
<w:hyperlink r:id="rId2">
    <w:del w:id="0" w:author="Unknown Author" w:date="2021-12-13T20:35:11Z">
        <w:bookmarkStart w:id="1" w:name="replacetext_2_0"/>
        <w:r>
            <w:rPr>
                <w:rStyle w:val="Heading1Char"/>
                <w:rFonts w:cs="Arial"/>
                <w:b w:val="false"/>
                <w:bCs w:val="false"/>
                <w:color w:val="000000" w:themeColor="text1"/>
                <w:sz w:val="22"/>
                <w:szCs w:val="22"/>
                <w:lang w:val="en-CA"/>
            </w:rPr>
            <w:delText>Age of 18 years</w:delText>
        </w:r>
    </w:del>
    <w:ins w:id="1" w:author="Unknown Author" w:date="2021-12-13T20:35:14Z">
        <w:bookmarkEnd w:id="1"/>
        <w:r>
            <w:rPr>
                <w:rStyle w:val="Heading1Char"/>
                <w:rFonts w:cs="Arial"/>
                <w:b w:val="false"/>
                <w:bCs w:val="false"/>
                <w:color w:val="000000" w:themeColor="text1"/>
                <w:sz w:val="22"/>
                <w:szCs w:val="22"/>
                <w:lang w:val="en-CA"/>
            </w:rPr>
            <w:t>Age of 18</w:t>
        </w:r>
    </w:ins>
    <w:r>
        <w:rPr>
            <w:rStyle w:val="Heading1Char"/>
            <w:rFonts w:cs="Arial"/>
            <w:b w:val="false"/>
            <w:bCs w:val="false"/>
            <w:color w:val="000000" w:themeColor="text1"/>
            <w:sz w:val="22"/>
            <w:szCs w:val="22"/>
            <w:lang w:val="en-CA"/>
        </w:rPr>
        <w:t>.</w:t>
    </w:r>
</w:hyperlink>
<w:r>
    <w:rPr>
        <w:rStyle w:val="Heading1Char"/>
        <w:rFonts w:cs="Arial"/>
        <w:b w:val="false"/>
        <w:bCs w:val="false"/>
        <w:color w:val="000000" w:themeColor="text1"/>
        <w:sz w:val="22"/>
        <w:szCs w:val="22"/>
        <w:lang w:val="en-CA"/>
    </w:rPr>
    <w:t xml:space="preserve"> Some text</w:t>
</w:r>
<w:bookmarkEnd w:id="0"/>
</w:p>
 

Комментарии:

1. Используя версию docx4j 3.3.6.

Ответ №1:

Не используйте docx4j 3.x! Вы должны использовать какой-то недавний выпуск…

Если вы хотите использовать XPath для поиска вашей закладки, вы можете использовать

 String xpath = "//w:bookmarkStart[@w:name='replacetext_2_0']";
 

в примере кода docx4j на https://github.com/plutext/docx4j/blob/master/docx4j-samples-docx4j/src/main/java/org/docx4j/samples/XPathQuery.java

Альтернативным подходом было бы взглянуть на https://github.com/plutext/docx4j/blob/master/docx4j-samples-docx4j/src/main/java/org/docx4j/samples/BookmarksReplaceWithText.java

Комментарии:

1. Вы имеете в виду, что использование последней версии решит проблему, указанную ниже. javax.xml.transform. Исключение TransformerException: префикс «w» для элемента «w: гиперссылка» не привязан.