示例
以下是MSDN的一个示例。它展示了如何使用xsl:key
将XML文件转换为HTML。
示例XML(输入)
<books>
<book title="XML Today" author="David Perry" release="2016"/>
<book title="XML and Microsoft" author="David Perry" release="2015"/>
<book title="XML Productivity" author="Jim Kim" release="2015"/>
</books>
示例XSL(输入)
<xsl:key name="title-search" match="book" use="@author"/>
<xsl:template match="/">
<HTML>
<BODY>
<xsl:for-each select="key('title-search', 'David Perry')">
<DIV>
<xsl:value-of select="@title"/>
</DIV>
</xsl:for-each>
</BODY>
</HTML>
</xsl:template>
示例HTML(输出)
<HTML>
<BODY>
<DIV>XML Today</DIV>
<DIV>XML and Microsoft</DIV>
</BODY>
</HTML>
我的问题
我想生成相同的HTML输出,但使用不同的XML输入。相应的XSL文件应该如何?
我的XML(输入)
<books>
<book>
<a n="author"><s>David Perry</s></a>
<a n="title"><s>XML Today</s></a>
<a n="release"><i>2016</i></a>
</book>
<book>
<a n="author"><s>David Perry</s></a>
<a n="title"><s>XML and Microsoft</s></a>
<a n="release"><i>2015</i></a>
</book>
<book>
<a n="author"><s>Jim Kim</s></a>
<a n="title"><s>XML Productivity</s></a>
<a n="release"><i>2015</i></a>
</book>
</books>
我的XSL(输入)
???
我的HTML(输出)
<HTML>
<BODY>
<DIV>XML Today</DIV>
<DIV>XML and Microsoft</DIV>
</BODY>
</HTML>
答案 0 :(得分:1)
在第一个示例中,您的密钥与book
属性匹配author
元素,但在新XML中,您希望通过a
元素匹配它们{{1}属性是&#34; author&#34;,所以键看起来像这样。
n
然后,要获得匹配的<xsl:key name="title-search" match="book" use="a[@n='author']/s"/>
的标题,您可以执行此操作...
book
因此,您的XSLT将如下所示:
<xsl:value-of select="a[@n='title']/s"/>
如果<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" />
<xsl:key name="title-search" match="book" use="a[@n='author']/s"/>
<xsl:template match="/">
<HTML>
<BODY>
<xsl:for-each select="key('title-search', 'David Perry')">
<DIV>
<xsl:value-of select="a[@n='title']/s"/>
</DIV>
</xsl:for-each>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
元素只是每个/s
元素下的唯一元素,那么您实际上可以将s
放在此处的表达式中。
这也可行:
a
答案 1 :(得分:0)
这是基本的XSLT转换,您可以这样做:
<xsl:template match="book">
<div>
Author: <xsl:value-of select="a[@n='author']/s" />
title: <xsl:value-of select="a[@n='title']/s" >
release: <xsl:value-of select="a[@n='release']/s" >
</div>
</xsl:template>