我有一个场景,我应该检查一个实体的教育水平是否等于'学士学位/本科学位'但是编译器会抛出一个错误,说“表达的预期结束,找到了'。” / p>
这是我的实际代码:
<xsl:when test="education_level='Bachelor's Degree/Undergraduate Degree'">
<opleiding>
<xsl:attribute name="id">
<xsl:value-of disable-output-escaping="yes" select="'30001'"/>
</xsl:attribute>
<xsl:value-of disable-output-escaping="yes" select="'Specialisation'"/>
</opleiding>
</xsl:when>
欢迎大家帮忙:)提前感谢
答案 0 :(得分:4)
您可以使用变量:
<xsl:variable name="s">Bachelor's Degree/Undergraduate Degree</xsl:variable>
然后:
<xsl:when test="education_level = $s">
答案 1 :(得分:2)
可以在test
属性中指定XPath表达式,而不必依赖其他变量及其文本节点子项:
<xsl:when test="education_level="Bachelor's Degree/Undergraduate Degree"">
这是一个完整的转变:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:choose>
<xsl:when test="education_level="Bachelor's Degree/Undergraduate Degree"">
<opleiding>
<xsl:attribute name="id">
<xsl:value-of select="'30001'"/>
</xsl:attribute>
<xsl:value-of select="'Specialisation'"/>
</opleiding>
</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
将此转换应用于以下XML文档:
<t>
<education_level>Bachelor's Degree/Undergraduate Degree</education_level>
</t>
产生了想要的正确结果:
<opleiding id="30001">Specialisation</opleiding>
附加说明:您不需要DOE,在这种特殊情况下,它将被忽略或产生错误 - 这是因为DOE仅在指令上被允许创建文本节点 - 而不是属性。
答案 2 :(得分:1)
根据您需要转义的引号/撇号是XML属性分隔符(外部引号)还是XPath字符串分隔符(内部引号),您需要不同的策略。
对于XML属性分隔符,请使用XML预定义实体"
和'
。
对于XPath字符串分隔符,在XPath 2.0中,您可以通过加倍(例如在SQL中)来转义它们,例如select="'I won''t'"
。在XPath 1.0中,没有办法转义字符串分隔符,因此您需要一种解决方法,例如使用变量,连接或切换使用双引号和单引号。在实践中,我通常会使用已经显示的变量。
答案 3 :(得分:-1)
逃离'in'学士学位“ - 你现在有education_level='Bachelor'
然后s Degree/Undergraduate Degree'
。试试education_level='Bachelor\'s Degree/Undergraduate Degree'
答案 4 :(得分:-1)
以下是您在问题中的标记:
test="education_level='Bachelor's Degree/Undergraduate Degree'"
我会第一个说我对xslt文件一无所知。 XML样式表?我不确定。无论它的目的是什么,任何解析器都会遇到同样的问题,因为你已经将名称/值对作为名称/值对的值包含在内,并且会导致问题。内部单引号(在Bachelor中)没有被解析为字符串中的文字引号,它被解析为值的结尾,即解析器正在解析事物为test
作为名字,并且它的值是education_level='Bachelor'
的名称/值对,后跟一些它不知道如何处理的东西:s Degree/Undergraduate Degree '
。
在大多数语言中,您必须转义内部引号,以便将它们视为字符串中的字符,而不是表示字符串结尾的语法字符。试试这个第一个标签:
<xsl:when test="education_level='Bachelor\'s Degree/Undergraduate Degree'">
\
是大多数语言中的转义字符,也应该是xslt。