困惑:如何在XSL中通过ID选择XML内容



我的目标是使用我的xml(1.0版本)和xsl(1.0版本)文件来创建html页面。

这是我的XML文件中的代码:

<Photo>
<Text id="one">This is the first Photo</Text>
<Image id="one" src="http://cdn.theatlantic.com/static/infocus/ngpc112812/s_n01_nursingm.jpg" /> </Photo>
<Photo>
<Text id="run">This is the run picture/Text>
<Image id="run" src="http://www.krav-maga.org.uk/uploads/images/news/running.jpg" /> </Photo>

我试图通过使用它们的ID来选择XML文档的各个部分。对于其他文本或段落,我也会这样做,我也会给出ID。目前,我正在使用for-each函数一次显示所有图像,但我不知道如何准确地选择单个文件。我在想这样的事情:

<xsl:value-of select="Photo/Text[one]"/>
<img> 
<xsl:attribute name="src" id="one">
 <xsl:value-of select="Photo/Image/@src"/>
 </xsl:attribute> 
</img>

<xsl:value-of select="Photo/Text[run]"/>
<img> 
<xsl:attribute name="src" id="run"> 
<xsl:value-of select="Photo/Image/@src"/> 
</xsl:attribute> 
</img>

但它不工作:(我尽我所能,但我迷路了。你能帮我吗?

您要查找的语法是:

<xsl:value-of select="Photo/Text[@id='one']" />

<xsl:value-of select="Photo/Image[@id='one']/@src" />
但是,您可能不希望为每个可能的@id重复此编码。在这里使用模板匹配很容易,只需选择photo元素并用一个共享模板处理它们。下面是一个示例XSLT,它将显示这是如何完成的
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="html" indent="yes"/>
   <xsl:template match="/*">
      <xsl:apply-templates select="Photo" />
   </xsl:template>
   <xsl:template match="Photo">
      <xsl:value-of select="Text" />
      <img src="{Image/@src}" />
   </xsl:template>
</xsl:stylesheet>

这将输出如下

This is the first Photo
<img src="http://cdn.theatlantic.com/static/infocus/ngpc112812/s_n01_nursingm.jpg">
This is the run picture
<img src="http://www.krav-maga.org.uk/uploads/images/news/running.jpg">

还要注意,在为图像创建src属性时使用了"属性值模板",这使得XSLT更易于编写。

相关内容

  • 没有找到相关文章

最新更新