Синтаксический анализ Java STX CDATA - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь анонимизировать экспорт XML слияния. Я нашел их экспортную баночку для очистки:

https://confluence.atlassian.com/doc/content-anonymizer-for-data-backups-134795.html

Я изменил clean.stx, чтобы удалить всех пользователей, как это:

<stx:template match="object[@class='ConfluenceUserImpl']/property[@name='name']/text() | object[@class='ConfluenceUserImpl']/property[@name='lowerName']/text() | object[@class='ConfluenceUserImpl']/id[@name='key']/text() | property[@class='ConfluenceUserImpl']/id[@name='key']/text()">
    <stx:value-of select="translate(., '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')"/>
</stx:template>

Мне нужно изменить CDATA, также используя регулярные выражения или аналогичные, чтобы удалить упоминания пользователей в теле страницы слияния.

CDATA выглядит так, например ::

<property name="body">
    <![CDATA[
        <p>
            <ac:link>
                <ri:user ri:userkey="8a8300716489cc7d016489ce009a0000" />
            </ac:link>
        </p>
    ]]>
</property>

Здесь мне нужно только заменить значение ri:userkey на xxx или подобное.

Как я могу это сделать?

1 Ответ

0 голосов
/ 31 августа 2018

Nevermind, теперь я использую joost java-версию stx, которая новее, чем та, которую использует attlassian в их банке: http://joost.sourceforge.net/

Я могу использовать replace () здесь и использовать stx: cdata для отключения экранирования:

    <stx:template match="property[@name='body']/cdata()">
    <stx:cdata>
        <stx:value-of select="replace(., '(ri:userkey=).*?\s', '$1&quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&quot; ')" />
    </stx:cdata>
</stx:template>
...