1

我的目标是使用我的 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>

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

4

1 回答 1

1

您正在寻找的语法是这样的

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

和这个

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

但是,您可能不想为您可能拥有的每个可能的@id重复此编码。在这里使用模板匹配很容易,只需选择照片元素并使用单个共享模板进行处理。这是一个示例 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 编写起来更整洁。

于 2013-05-11T18:21:52.730 回答