我正在使用Apache FOP,并且已经看到:XSL-在XSL:when测试期间转义撇号,用于在XSL:when测试期间转义字符。
但是,我在使用xsl:模板匹配执行相同的等价测试时遇到问题
示例XML
<?xml version="1.0" encoding="UTF-8"?>
<TASKLIST>
<STEP>
<STEP_ATTRIBUTE NAME="Step Name">tenants' A & A works</STEP_ATTRIBUTE>
</STEP>
<STEP>
<STEP_ATTRIBUTE NAME="Step Name">test</STEP_ATTRIBUTE>
</STEP>
</TASKLIST>
样品XSL
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.1"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:barcode="org.krysalis.barcode4j.xalan.BarcodeExt"
xmlns:xalan="http://xml.apache.org" exclude-result-prefixes="barcode xalan">
<xsl:variable name="apos">'</xsl:variable>
<xsl:variable name="amps">&</xsl:variable>
<xsl:template match="TASKLIST">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simple"
page-width="21cm" page-height="29.7cm" margin-left="1cm"
margin-right="1cm">
<fo:region-body margin-top="0.5cm" />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="simple">
<fo:flow flow-name="xsl-region-body">
<xsl:apply-templates/>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="STEP[STEP_ATTRIBUTE='Step Name'] = concat('tenants', $apos, ' A ', $amps, ' A works')">
<fo:block>
Template Match Equal
</fo:block>
</xsl:template>
<xsl:template match="STEP[STEP_ATTRIBUTE[@NAME='Step Name'] = 'test']">
<fo:block>
<xsl:choose>
<xsl:when test=".[@NAME='Data Name'] = concat('tenants', $apos, ' A ', $amps, ' A works')">
When Test Equal
</xsl:when>
<xsl:otherwise>
When Test NOT Equal
</xsl:otherwise>
</xsl:choose>
</fo:block>
</xsl:template>
<xsl:template match="STEP">
<fo:block>
Catch Non Template Match
</fo:block>
</xsl:template>
</xsl:stylesheet>
PDF格式输出:
Catch Non Template Match
When Test Equal
当测试成功而模板匹配失败时,xsl:
如果有人能给我指出正确的方向或者告诉我我做错了什么,我会非常感激的。
非常感谢
您的匹配属性必须匹配一个节点,但您在其中执行的测试不会返回节点(而是布尔结果)。
您可以将其更改为与节点匹配,将表达式的第二部分放置在测试当前节点的谓词中。也许这就是你想要的:
STEP[STEP_ATTRIBUTE='Step Name'][node() = concat('tenants', $apos, ' A ', $amps, ' A works')]
正如我们所看到的,一个反斜杠 "\" 是用来表示匹配字符类的。所以它是一个特殊字符。 还存在其它的特殊字符,这些字符在正则表达式中有特殊的含义。它们可以被用来做更加强大的搜索。 这里是包含所有特殊字符的列表:[ \ ^ $ . | ? * + ( )。 现在并不需要尝试去记住它们 —— 当我们分别处理其中的每一个时,你自然而然就会记住它们。 转义 如果要把特殊字符作为常规字符来使用,只需要在它前面
问题内容: 我想电视机1 ® 2的outputText: 什么不对?我大写。 问题答案: 您可以选择以下之一 在您最初的建议中,您放错了位置,应该在 您也可以完全删除(但您的(R)不会很小) 最后,您可以直接使用它而无需转义
问题内容: Oracle中是否有一种简单的方法来转义SQL语句中的特殊字符?(即%,&,’)我看到了有关手动转义字符的链接,但我认为Oracle可能提供了一种更简便的方法。 注意:我正在通过ORM生成动态SQL select语句。 问题答案: 如果使用绑定变量和ORM,则应自动处理嵌入的单引号和“&”号。这些是SQL * Plus或SQL * Developer中的特殊字符。 要在查找文字字符%和
我试图验证一个字符串,它应该只包含字母、数字和特殊字符。为此,我尝试使用正则表达式。 在使用上述代码时,字符串是有效的。但我的要求是出示这个无效。ie每当出现字母、数字或特殊字符以外的字符时,字符串的计算结果应为无效。如何使用regex实现这一点?
问题内容: 我们为科学应用程序提供了一个带有较长段落的表格,其中包含诸如符号beta(ß-arrestin)等字符。我们在Mule上运行一个JSON服务,该服务获取数据并持久保存到oracle数据库中。这个带有长段的特殊元素给我RAML / JSON错误。下面是错误 科学家写下的形式元素我们无法控制。因此,在M子方面,我们如何像Java具有URLEncoded一样自动地转义这些字符。非常感谢 问题
我们有一个表单,其中有一个很长的段落,用于包含符号beta(ß-arrestin)等字符的Scientific应用程序。我们有一个在Mule上运行的JSON服务,它获取数据并保存到oracle数据库。这个带有长段落的特殊元素在RAML/JSON中给了我一个错误。下面是错误 科学家们所写的形式元素我们无法控制。因此,在骡子方面,我们如何像java那样自动摆脱这些角色呢。非常感谢