从xslt / xpath

时间:2018-04-24 19:47:26

标签: xslt xpath attributes

我需要从属性中读取图像的路径。包含此属性的元素的路径仅由另一个元素的另一个属性引用。也就是说,我在一个元素中有一个ID,它引用另一个ID,其元素中包含我所需路径的属性。我想将路径用作html标记中的属性。

xml source

<root>
     <a lot of nodes>
       <relation id="path_1" path="path/to/image1">
       <relation id="path_2" path="path/to/image2">
       ...
     <more nodes>
       <reference path="path_1">
       <reference path="path_2>
       ...
</root>

所需的输出(xslt片段,类似这样)

<xsl:template match="path/to/reference">
  <img src="{@path}>
  <xsl:apply-templates>
</xsl:template>

所需的输出(html代码段)

<img src="path/to/image1>
...
<img src="path/to/image2>

如何使用元素中的ID&#34;引用&#34;从元素&#34;关系&#34;?读取ID的值

2 个答案:

答案 0 :(得分:1)

请考虑在此使用xsl:key(这必须作为xsl:stylesheet的直接子项放在您的样式表中):

<xsl:key name="relations" match="relation" use="@id" />

然后,在匹配reference的模板中,您可以执行此操作

<xsl:template match="reference">
   <img src="{key('relations', @path)/@path}" />
</xsl:template>

答案 1 :(得分:0)

可以满足您需求的模板

<xsl:template match="relation[@id = ../reference/@path]">
  <img src="{@path}">
    <xsl:apply-templates />
  </img>
</xsl:template> 

它的输出是:

<img src="path/to/image1"/>
<img src="path/to/image2"/>

另一种方式是:

<xsl:template match="reference[@path = ../relation/@id]">
  <img src="{../relation/@path}">
    <xsl:apply-templates />
  </img>
</xsl:template>  

产生相同的输出。