0

我正在尝试匿名化汇合的 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 或类似的值即可。

我怎样才能做到这一点?

4

1 回答 1

0

没关系,我现在使用 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', '$1&quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&quot; ')" />
    </stx:cdata>
</stx:template>
于 2018-08-31T10:23:13.937 回答