我尝试了不同的方式,也环顾四周但却无法运行。 我需要了解以下内容:
"concat(
'this is; \"a sample',
//XML_NODE,
'\"; \"using an apostrophe',
''',
'in text\"'
)"
一行版本:
"concat( 'this is; \"a sample', //XML_NODE, '\"; \"using an apostrophe', ''', 'in text\"' )"
输出应为:
this is "a sample XML_NODE_VALUE"; "using an apostrophe ' in text"
问题是'在文中。 concat使用它来结束字符串并期望跟随;或者结束。转义或HTML实体似乎都不起作用。
非常感谢任何帮助。
谢谢!
答案 0 :(得分:7)
在XML / XSLT中,您不会使用反斜杠转义字符。
concat字符串中的撇号问题是加载XSLT的XML解析器会在XSLT引擎评估concat之前扩展它。所以你不能使用撇号字符的实体引用,除非它用双引号括起来(或双引号的实体引用,如Dimitre Novatchev的答案所示)。
"
作为双引号"
。在XSLT的上下文中应用:
<xsl:variable name="apostrophe">'</xsl:variable>
<xsl:value-of select="concat(
'this is; "a sample',
//XML_NODE,
'"; "using an apostrophe ',
$apostrophe,
' in text"'
)" />
如果你需要一个100%的XPath解决方案来避免使用XSLT变量,那么Dimitre的答案是最好的。
如果您担心阅读,理解和维护是多么容易,那么Michael Kay建议将XSLT变量用于引用和撇号可能是最好的。
答案 1 :(得分:6)
无需变量:
以下是如何以两种方式生成所需输出的示例:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:text>this is "a sample XML_NODE_VALUE"; "using an apostrophe ' in text"</xsl:text>
=============
<xsl:value-of select=
"concat('this is ',
'"a sample XML_NODE_VALUE"; "',
"using an apostrophe ' in text",
'"'
)
"/>
</xsl:template>
</xsl:stylesheet>
当此转换应用于任何XML文档(未使用)时,生成所需的输出:
this is "a sample XML_NODE_VALUE"; "using an apostrophe ' in text"
=============
this is "a sample XML_NODE_VALUE"; "using an apostrophe ' in text"
答案 2 :(得分:4)
我发现最简单的解决方案是声明变量:
<xsl:variable name="apos">'</xsl:variable>
<xsl:variable name="quot">"</xsl:variable>
<xsl:value-of select="concat('This is ', $quot, "a sample using ", $apos)"/>