使用xml和xslt,并试图掌握它。
我的xml代码如下所示:
<hello-world>
<header eng="Welcome!" dk="Velkommen"></header>
<greeting>
<eng>Hello, World!</eng>
<dk>Hej verden</dk>
</greeting>
<greeting>
<eng>Hello space</eng>
<dk>Hej Rummet!</dk>
</greeting>
<greeting>
<eng>Hey Mom! Im coding XSLT</eng>
<dk>Hej Mor! Jeg koder XSLT</dk>
</greeting>
</hello-world>
到目前为止,我已将我的xml翻译成此HTML:
<html>
<body>
<div>
<ul>
<li>Hello, World!</li>
</ul>
</div>
<div>
<ul>
<li>Hello space</li>
</ul>
</div>
<div>
<ul>
<li>Hey Mom! Im coding XSLT</li>
</ul>
</div>
<div>
<ul>
<li>Hej verden</li>
</ul>
</div>
<div>
<ul>
<li>Hej Rummet!</li>
</ul>
</div>
<div>
<ul>
<li>Hej Mor! Jeg koder XSLT</li>
</ul>
</div>
</body>
</html>
使用这个xslt:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="/hello-world/greeting">
<div>
<ul>
<li><xsl:value-of select="eng" /></li>
</ul>
</div>
</xsl:for-each>
<xsl:for-each select="/hello-world/greeting">
<div>
<ul>
<li><xsl:value-of select="dk" /></li>
</ul>
</div>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我想知道的是,如果有更好的方法,以及如何在标题上实现和选择正确的属性并应用于foreach。
谢谢!
答案 0 :(得分:2)
您可以使用为“eng”和“dk”元素执行某些操作的模板,并按顺序将其应用于“eng”和“dk”:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="hello-world/greeting/eng"/>
<xsl:apply-templates select="hello-world/greeting/dk"/>
</body>
</html>
</xsl:template>
<xsl:template match="dk | eng">
<div>
<ul>
<li><xsl:value-of select="."/></li>
</ul>
</div>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:-1)
在XSLT中,您可以使用apply-template function定义自己的模板,这有点等同于过程编程语言中的函数。模板将应用于选择值。模板是一个强大的概念。它们还可以接受参数,以便您可以将多个值传递给模板并控制流程。
您需要定义两种语言的模板(在主模板之后):
<xsl:template match="dk">
<div>
<ul>
<li>
<xsl:value-of select="." />
</li>
</ul>
</div>
</xsl:template>
<xsl:template match="eng">
<div>
<ul>
<li>
<xsl:value-of select="." />
</li>
</ul>
</div>
</xsl:template>
然后在主模板中为所需值调用:
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="/hello-world/greeting">
<xsl:apply-templates select="eng"></xsl:apply-templates>
</xsl:for-each>
<xsl:for-each select="/hello-world/greeting">
<xsl:apply-templates select="dk"></xsl:apply-templates>
</xsl:for-each>
</body>
</html>
</xsl:template>
输出与原始输出相同。你基本上是在说formatOutputFor(currentStringValue)
之类的东西。完整的转换如下:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="/hello-world/greeting">
<xsl:apply-templates select="eng"></xsl:apply-templates>
</xsl:for-each>
<xsl:for-each select="/hello-world/greeting">
<xsl:apply-templates select="dk"></xsl:apply-templates>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template match="dk">
<div>
<ul>
<li>
<xsl:value-of select="." />
</li>
</ul>
</div>
</xsl:template>
<xsl:template match="eng">
<div>
<ul>
<li>
<xsl:value-of select="." />
</li>
</ul>
</div>
</xsl:template>
</xsl:stylesheet>