在xslt中使用java字符串函数

我想在XSLT 1.0中使用java字符串函数。具体来说就是java String替换函数。在xslt中使用java字符串函数

但它失败,出现空指针异常。下面是我的尝试:

1)--Declare namespace and call the java String class 

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:jString="http://www.oracle.com/XSL/Transform/java/java.lang.String">

2)--Created a template to search for tag inputs that have an ampersand:

<xsl:template name="string-replace-all">

<xsl:param name="text" />

<xsl:choose>

<xsl:when test="contains($text, '&')">

<xsl:variable name="str1" select="jString:new($text)"/>

<xsl:value-of select="jString:replace($str1,'&','&amp;')" />

<xsl:otherwise>

<xsl:value-of select="$text" />

</xsl:otherwise>

</xsl:choose>

</xsl:template>

3)--Call the template in the specific tags

<Nm>

<xsl:variable name="suppNm">

<xsl:call-template name="string-replace-all">

<xsl:with-param name="text" select="Payee/Name" />

</xsl:call-template>

</xsl:variable>

<xsl:value-of select="$suppNm" />

</Nm>

不过,我不断收到一个空指针异常: 引起:oracle.xdo.parser.v2.XPathException:扩展功能错误:错误调用“取代”:'java.lang中。 NullPointerException'

任何人都可以指导我如何使这项工作?

感谢

回答:

分析您的XSL代码:

  1. 在模板string-replace-all有没有封闭标签when的,所以加</xsl:when>
  2. 输入XML未被显示,因此没有人知道收款人/姓名中的值。看这部分contains($text, '&')我想Name块有价值像sample1 & sample2。在的情况下&其后面没有#(例如&#160;),XML解析器被隐含找五个预定义实体名称ltgtampquotapos,或者任何手动定义实体名称中的一个。所以在输入XML中,&必须转义为&amp;
  3. 如果当您使用jString:replace(string, target, replacement)NullPointerException异常存在,如果目标或更换为空(Java.lang.String.replace() Method),因此可能问题是目标没有拿起原因&。 同样替换你可以使用jString:replaceAll(string, regex, replacement)
  4. 最后示例在XSLT用java字符串功能:

对于下面的XML:

<?xml version="1.0"?> 

<Payee>

<Name>sample1 &amp; sample2</Name>

</Payee>

使用类似于XSL(例如与&quot;)替换&amp;

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 

xmlns:jString="http://www.oracle.com/XSL/Transform/java/java.lang.String"

exclude-result-prefixes="jString" version="1.0">

<xsl:output method="xml"/>

<xsl:template name="string-replace-all">

<xsl:param name="text" />

<xsl:choose>

<xsl:when test="contains($text, '&amp;')">

<xsl:variable name="str1" select="jString:new($text)"/>

<xsl:value-of select="jString:replaceAll($str1, '&amp;','&quot;')" />

</xsl:when>

<xsl:otherwise>

<xsl:value-of select="$text" />

</xsl:otherwise>

</xsl:choose>

</xsl:template>

<xsl:template match="/">

<Nm>

<xsl:variable name="suppNm">

<xsl:call-template name="string-replace-all">

<xsl:with-param name="text" select="/Payee/Name"/>

</xsl:call-template>

</xsl:variable>

<xsl:value-of select="$suppNm" />

</Nm>

</xsl:template>

</xsl:stylesheet>

结果是:

<?xml version="1.0" encoding="UTF-8"?> 

<Nm>sample1 " sample2</Nm>

  • 主要重要输入XML:

    • 如果它简单的文本与&如下:

    <Payee> 

    <Name>Jüërgëns GmbH & S's</Name>

    </Payee>

  • 那么你应该有错误:The entity name must immediately follow the '&' in the entity reference.

    • 如果你有如下&<![CDATA[]]>

    <Payee> 

    <Name><![CDATA[Jüërgëns GmbH & S's]]></Name>

    </Payee>

    然后使用XSL如下:

    <?xml version="1.0" encoding="UTF-8"?> 

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:output method="xml"/>

    <xsl:template match="/">

    <Nm>

    <xsl:value-of select="/Payee/Name" />

    </Nm>

    </xsl:template>

    </xsl:stylesheet>

    输出将是如下:

    <?xml version="1.0" encoding="UTF-8"?> 

    <Nm>Jüërgëns GmbH &amp; S's</Nm>

    希望所有关注上方将与您的情况有所帮助。

    回答:

    我通过试错找到了解决方案。那么哪个替换为&?效果很好,同样适用于& amp;不起作用。所以我用java字符串处理触点功能来实现这一目标:

    下面是最终的模板:

    <xsl:template name="string-replace-all"> 

    <xsl:param name="text" />

    <xsl:choose>

    <xsl:when test="contains($text, '&amp;') or contains($text, '&amp;') ">

    <xsl:variable name="str1" select="jString:new(translate($text,'áàâäéèêëíìîïóòôöúùûüç','aaaaeeeeiiiioooouuuuc'))"/>

    <xsl:value-of select="(jString:replaceAll(jString:replaceAll($str1,'&amp;',jString:concat('&amp;','amp;')),'&amp;apos;','&amp;amp;apos;'))" />

    </xsl:when>

    <xsl:otherwise>

    <xsl:value-of select="$text" />

    </xsl:otherwise>

    </xsl:choose>

    </xsl:template>

    以上是 在xslt中使用java字符串函数 的全部内容, 来源链接: utcz.com/qa/265709.html

    回到顶部