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', '"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ')" />
</stx:cdata>
</stx:template>
我正在尝试匿名化 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', '"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ')" />
</stx:cdata>
</stx:template>