Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt XSL转换和XPath_Xslt_Xpath - Fatal编程技术网

Xslt XSL转换和XPath

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文档:

<?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]