我的目标是使用我的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更易于编写。