【问题标题】:Java STX CDATA parsingJava STX CDATA 解析
【发布时间】:2019-02-06 03:07:50
【问题描述】:

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

我该怎么做?

【问题讨论】:

    标签: java xslt cdata confluence stx


    【解决方案1】:

    没关系, 我现在使用 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 2014-10-24
      • 2021-12-15
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多