我正在尝试在我的样式表中使用java函数,该函数表将基于正则表达式字符拆分字符串并返回NodeList。
例如,我希望我的样式表类似于:
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="http://xml.apache.org/xalan"
version="1.0">
<xsl:template match="/">
<Root>
<xsl:copy-of select="re:splitRegex('This is my string', '\s\s+')"/>
</Root>
</xsl:template>
</xsl:stylesheet>
我希望生成的XML看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns:stash="xalan://com.nxtech.util.io.Stash">
<token>This</token>
<token>is</token>
<token>my</token>
<token>string</token>
</Root>
我的java代码中有这个函数,它返回一个字符串数组:
public static String[] split(String toSplit,String regex) {
return toSplit.split(regex);
}
但是我需要一些返回NodeList
的东西,或者正确格式化我的XML文件的东西。
答案 0 :(得分:0)
我同意Martin的观点,最好在 XSLT 2.0 中进行。
但如果您更喜欢 Xalan / Java 方法,那么:
更改您的Java函数,以便它返回连接
代币,&#34;包封&#34;在token
个标签之间(开启和关闭)。
`<token>...</token>`
(在\n
之后加</token>
。
返回的内容应该在开始和结束之间写出 Root 标记。
如果由于其他原因需要node-set
,您可以按照以下方式执行此操作:
在stylesheet
标记中包含:
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl"
你的分裂函数应该返回一个连接的字符串(如上所述)。
然后,在适当的地方写:
<xsl:variable name="wrk">
<xsl:value-of select="re:splitRegex('This is my string', '\s\s+')"/>
</xsl:variable>
<xsl:variable name="tokens" select="exsl:node-set($wrk)"/>
node-set
函数将结果树片段更改为&#34;适当的&#34; node-set
您可以使用,例如在XPath中或以任何其他方式。