Java STX CDATA解析

Java STX CDATA parsing

我正在尝试匿名化 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之类的就可以了

我该怎么做?

没关系, 我现在使用 stx 的 joost java 版本,它比 attlassian 在他们的 jar 中使用的版本更新: http://joost.sourceforge.net/

我可以在这里使用 replace() 并使用 stx:cdata 来禁用转义:

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