xsl不需要的下一个元素 - 从标记和子标记中读取属性

时间:2010-09-21 15:19:35

标签: xml xslt

这次我非常接近;)

贝娄有:

  1. my xsl script
  2. 我的xml文件(调用脚本)

  3. 在xml上操作xsl的输出(如shuold所示)

  4. 我的问题是,虽然href和src值应该相同,但总是有一个 他们之间的图片差异(pic3和pic4)好像我正在调用下一个pic元素......但我不明白我在哪里做这个?

     <xsl:for-each select="data/pics/pic">
            <div>                   
                <a>
                    <xsl:attribute name="href">
                        <xsl:value-of select="@href" />
                    </xsl:attribute>
                    <img>
                        <xsl:attribute name="src">
                            <xsl:value-of select="@src" />
                        </xsl:attribute>
    
                    </img>
                </a>
            </div>
        </xsl:for-each>
    

    这是我的xml

    <data>
        <pics>
            <pic href="pics\pic05.jpg" src="pics\pic05.jpg"></pic>
            <pic href="pics\pic04.jpg" src="pics\pic04.jpg"></pic>
            <pic href="pics\pic03.jpg" src="pics\pic03.jpg"></pic>
            <pic href="pics\pic02.jpg" src="pics\pic02.jpg"></pic>
            <pic href="pics\pic01.jpg" src="pics\pic01.jpg"></pic> 
        </pics> 
    </data> 
    

    这应该是输出:

    <div>
        <a href="pics\pic01.jpg">
            <img src="pics\pic01.jpg">
        </a>
    </div>
    <div>
        <a href="pics\pic02.jpg">
            <img src="pics\pic02.jpg">
        </a>
    </div>
    <div>
        <a href="pics\pic03.jpg">
            <img src="pics\pic03.jpg">
        </a>
    </div>
    <div>
        <a href="pics\pic04.jpg">
            <img src="pics\pic04.jpg">
        </a>
    </div>
    <div>
        <a href="pics\pic05.jpg">
            <img src="pics\pic05.jpg">
        </a>
    </div>
    

1 个答案:

答案 0 :(得分:2)

您使用的XSLT处理器可能有错误,或者您没有提供真正的xslt代码和xml文档。

提供的XSLT代码片段(包含在完整的样式表中

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
 <xsl:template match="/">
  <html>
     <xsl:for-each select="data/pics/pic">
            <div>
                <a>
                    <xsl:attribute name="href">
                        <xsl:value-of select="@href" />
                    </xsl:attribute>
                    <img>
                        <xsl:attribute name="src">
                           <xsl:value-of select="@src" />
                        </xsl:attribute>
                    </img>
                </a>
            </div>
        </xsl:for-each>
  </html>
 </xsl:template>
</xsl:stylesheet>

并应用于提供的XML文档

<data>
    <pics>
        <pic href="pics\pic05.jpg" src="pics\pic05.jpg"></pic>
        <pic href="pics\pic04.jpg" src="pics\pic04.jpg"></pic>
        <pic href="pics\pic03.jpg" src="pics\pic03.jpg"></pic>
        <pic href="pics\pic02.jpg" src="pics\pic02.jpg"></pic>
        <pic href="pics\pic01.jpg" src="pics\pic01.jpg"></pic>
    </pics>
</data>

生成想要的正确结果

<html>
    <div>
        <a href="pics\pic05.jpg">
            <img src="pics\pic05.jpg"/>
        </a>
    </div>
    <div>
        <a href="pics\pic04.jpg">
            <img src="pics\pic04.jpg"/>
        </a>
    </div>
    <div>
        <a href="pics\pic03.jpg">
            <img src="pics\pic03.jpg"/>
        </a>
    </div>
    <div>
        <a href="pics\pic02.jpg">
            <img src="pics\pic02.jpg"/>
        </a>
    </div>
    <div>
        <a href="pics\pic01.jpg">
            <img src="pics\pic01.jpg"/>
        </a>
    </div>
</html>

当使用多个不同的XSLT处理器执行时,此转换产生相同的结果,例如MSXML3,4,6,Saxon6.5和AltovaXML(XML-SPY)。

请注意,转换可以重构为更短且可读的内容:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
 <xsl:template match="/">
  <html>
     <xsl:for-each select="data/pics/pic">
            <div>
                <a href="{@href}">
                    <img src="{@src}"/>
                </a>
            </div>
        </xsl:for-each>
  </html>
 </xsl:template>
</xsl:stylesheet>