Xslt XSL转换和XPath
我正在开发一个应用程序,用于转换如下所示的XML文档:Xslt XSL转换和XPath,xslt,xpath,Xslt,Xpath,我正在开发一个应用程序,用于转换如下所示的XML文档: <?xml version='1.0' encoding='ISO-8859-1'?> <!DOCTYPE words SYSTEM "words.dtd"> <words> <word id="word_1">Alfa</word> <word id="word_2">Beta</word> <word id="word_3">Gamma<
<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE words SYSTEM "words.dtd">
<words>
<word id="word_1">Alfa</word>
<word id="word_2">Beta</word>
<word id="word_3">Gamma</word>
<word id="word_4">Delta</word>
<word id="word_5">Zeta</word>
</words>
<xsl:template match="word">
<xsl:if test="@id = $Hurrengo_Hitza">
<!-- Processing here -->
</xsl:if>
</xsl:template>
它没有显示结果,我需要在XSLT中更改什么?XPath表达式中有问题吗?XSLT中的参数前面必须有一个dolar符号$ 因此,请尝试:
<xsl:template match="word[@id = $Hurrengo_Hitza]">
XSLT中的参数前面需要有一个dolar符号$ 因此,请尝试:
<xsl:template match="word[@id = $Hurrengo_Hitza]">
改变
<xsl:template match="word/[@id = Hurrengo_Hitza]">
到
改变
<xsl:template match="word/[@id = Hurrengo_Hitza]">
到
这里有两个问题:
word/[@id=Hurrengo\u Hitza]在语法上是无效的XPath-一个谓词显示在位置步骤中的节点测试之后
。即使更正为现在语法上有效的XPath表达式和匹配模式,此模板也不会匹配任何节点-它匹配任何id属性的字符串值等于其Hurrengo_Hitza元素之一的字符串值的单词。但是,所提供的XML文档中没有word元素具有名为Hurrengo_Hitza的子元素,因此该模板与任何节点都不匹配,根本不会执行
解决方案:
您需要的是一个匹配模式,如:word[@id=$Hurrengo\u Hitza]-变量或参数引用必须以$character开头
如果您更改:
致:
您将有一个有效的XSLT2.0解决方案
然而,在您似乎正在使用的XSLT1.0中,在匹配模式中使用变量或参数引用是非法的
因此,XSLT解决方案如下所示:
<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE words SYSTEM "words.dtd">
<words>
<word id="word_1">Alfa</word>
<word id="word_2">Beta</word>
<word id="word_3">Gamma</word>
<word id="word_4">Delta</word>
<word id="word_5">Zeta</word>
</words>
<xsl:template match="word">
<xsl:if test="@id = $Hurrengo_Hitza">
<!-- Processing here -->
</xsl:if>
</xsl:template>
这里有两个问题:
word/[@id=Hurrengo\u Hitza]在语法上是无效的XPath-一个谓词显示在位置步骤中的节点测试之后
。即使更正为现在语法上有效的XPath表达式和匹配模式,此模板也不会匹配任何节点-它匹配任何id属性的字符串值等于其Hurrengo_Hitza元素之一的字符串值的单词。但是,所提供的XML文档中没有word元素具有名为Hurrengo_Hitza的子元素,因此该模板与任何节点都不匹配,根本不会执行
解决方案:
您需要的是一个匹配模式,如:word[@id=$Hurrengo\u Hitza]-变量或参数引用必须以$character开头
如果您更改:
致:
您将有一个有效的XSLT2.0解决方案
然而,在您似乎正在使用的XSLT1.0中,在匹配模式中使用变量或参数引用是非法的
因此,XSLT解决方案如下所示:
<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE words SYSTEM "words.dtd">
<words>
<word id="word_1">Alfa</word>
<word id="word_2">Beta</word>
<word id="word_3">Gamma</word>
<word id="word_4">Delta</word>
<word id="word_5">Zeta</word>
</words>
<xsl:template match="word">
<xsl:if test="@id = $Hurrengo_Hitza">
<!-- Processing here -->
</xsl:if>
</xsl:template>
如下所述,我已经纠正了那个错误,但仍然没有结果。想法?如下所述,我已经纠正了那个错误,但仍然没有结果。想法?在匹配属性上有一个变量似乎有问题。我得到了XPath错误:未定义的变量看看编辑过的答案,应该是word[@id]而不是word/[@id]。在match属性上有一个变量似乎有问题。我得到了XPath错误:未定义的变量看看编辑过的答案,它应该是word[@id]而不是word/[@id]