【问题标题】:create and return a Nodelist after parsing a string with regex使用正则表达式解析字符串后创建并返回节点列表
【发布时间】:2017-03-20 14:40:41
【问题描述】:

我正在尝试制作一个 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 文件的东西。

【问题讨论】:

  • 您的结果看起来不像 XML。
  • 抱歉,我删除了重复行。
  • 重复的行不是唯一的问题,你还有一个自闭合的根元素,所有的标记标签都没有了。
  • 我再次道歉,我复制并粘贴并认为这是不言自明的。我希望这可以消除任何困惑。
  • 当您将 XSLT 与 Java 一起使用时,为什么不能使用 Saxon 9 和纯 XSLT/XPath 2.0 来完成这项工作,或者如果您使用 Xalan,那么它具有内置的 EXSLT 支持 xalan.apache.org/old/xalan-j/apidocs/org/apache/xalan/lib/…实现这一目标。如果您真的想在 Java 中为 Xalan 自己实现它,那么我想该 Exslt 函数的 Xalan 源代码将显示如何设置它。

标签: java regex xml xslt nodelist


【解决方案1】:

我同意 Martin 的观点,最好在 XSLT 2.0 中进行。

但如果您更喜欢 Xalan / Java 方法,那么:

解决方案 #1

更改您的 Java 函数,使其返回连接的 标记,“包裹”在token 标记之间(打开和关闭)。

`<token>...</token>`

(在每个&lt;/token&gt; 之后加上\n)。

返回的内容应该在打开和关闭之间写出 标签。

解决方案 #2

如果您出于其他原因需要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 函数将 结果树片段 更改为“正确的”node-set 您可以使用它,例如在 XPaths 或任何其他方式中。

【讨论】:

  • 如果函数返回一个字符串,那么这些建议都不起作用。
猜你喜欢
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 2013-05-06
  • 2019-12-10
  • 2010-11-22
相关资源
最近更新 更多