Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式解析字符串后创建并返回节点列表_Java_Regex_Xml_Xslt_Nodelist - Fatal编程技术网

Java 使用正则表达式解析字符串后创建并返回节点列表

Java 使用正则表达式解析字符串后创建并返回节点列表,java,regex,xml,xslt,nodelist,Java,Regex,Xml,Xslt,Nodelist,我试图在样式表中使用一个java函数,该函数将基于正则表达式字符拆分字符串并返回节点列表 例如,我希望我的样式表类似于: <?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

我试图在样式表中使用一个java函数,该函数将基于正则表达式字符拆分字符串并返回节点列表

例如,我希望我的样式表类似于:

<?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文件的东西。

我同意Martin的观点,在XSLT2.0中这样做更好

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

解决方案#1 更改Java函数,使其返回串联 令牌,“封装”在
令牌
标记(开始和结束)之间

分割函数应该返回一个连接字符串(如上所述)

然后,在适当的地方写下:

<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)"/>

节点集
函数将结果树片段更改为“适当的”
节点集

您可以在XPath或其他任何方式中使用它。

我同意Martin的观点,在XSLT2.0中使用它更好

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

解决方案#1 更改Java函数,使其返回串联 令牌,“封装”在
令牌
标记(开始和结束)之间

分割函数应该返回一个连接字符串(如上所述)

然后,在适当的地方写下:

<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)"/>

节点集
函数将结果树片段更改为“适当的”
节点集

您可以在XPath或任何其他方式中使用它。

您的结果看起来不像XML。很抱歉,我删除了重复行。重复行不是唯一的问题,您还有一个自动关闭的根元素,所有标记标记都不在其中。我再次表示歉意,我复制并粘贴了它,并认为这是不言自明的。我希望这能消除任何混淆。当您将XSLT与Java一起使用时,为什么不能使用Saxon 9和纯XSLT/XPath 2.0来完成这项工作,或者如果您使用Xalan,那么它内置了EXSLT支持来实现这一点。如果你真的想在Java for Xalan中自己实现它,那么我想Exslt函数的Xalan源代码将显示如何设置它。你的结果看起来不像XML。很抱歉,我删除了重复行。重复行不是唯一的问题,您还有一个自动关闭的根元素,所有的令牌标记都没有了。我再次道歉,我复制并粘贴了它,并认为它是不言自明的。我希望这能消除任何混淆。当您将XSLT与Java一起使用时,为什么不能使用Saxon 9和纯XSLT/XPath 2.0来完成这项工作,或者如果您使用Xalan,那么它内置了EXSLT支持来实现这一点。如果您真的想在Java for Xalan中自己实现它,那么我想Exslt函数的Xalan源代码将显示如何设置它。如果函数返回字符串,则这些建议都不起作用。如果函数返回字符串,则这些建议都不起作用。
`<token>...</token>`
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)"/>