当前位置: 首页 > 知识库问答 >
问题:

转义模板匹配中的特殊字符

柳浩大
2023-03-14

我正在使用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 &amp; 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">&amp;</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:

如果有人能给我指出正确的方向或者告诉我我做错了什么,我会非常感激的。

非常感谢

共有1个答案

缪嘉志
2023-03-14

您的匹配属性必须匹配一个节点,但您在其中执行的测试不会返回节点(而是布尔结果)。

您可以将其更改为与节点匹配,将表达式的第二部分放置在测试当前节点的谓词中。也许这就是你想要的:

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那样自动摆脱这些角色呢。非常感谢