我正在尝试将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或类似的值即可。
我该怎么做?
答案 0 :(得分: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"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ')" />
</stx:cdata>
</stx:template>