我知道这很容易,但我试过了,XSLT 对我来说真的无法理解……这就是为什么我想在我的代码上有一个例子,这样我就可以在真实案例中检查它并可能理解它。
所以我有一个应用程序,它有 GUI 树视图并生成我这种类型的 XML:
<TreeView>
<Parent text="Installation">
<child text="Startup" type="video" file="startup.wmv" icon="c://user/desktop/blahblah.jpg"/>
<child text="Getting there" type="video" file="gettingthere.wmv" icontPath="something"/>
<child text="Steps" type="document" file="steps.docx" icon="asd"/>
<child text="Pictures" type="image" file="pics.jpg" icon="dasdasdas"/>
</Parent>
<Parent text="Usage">
<child text="Tilbud pane" type="video" file="tilbud.mwv" icon="asdasd"/>
<child text="Report pane" type="document" file="report.docx" icon="gfdhd"/>
</Parent>
</TreeView>
然后我需要将此 XML 转换为 HTML,以便我可以在我的网站中更新它。
所以我不需要<html>
and<body>
标签。我只需要将此 XML 排序到一个列表中,而在子元素之前应该有一些空间。
用户在浏览器中查看的所需输出将如下所示:
Installation
Startup
Getting there
Steps
Pictures
Usage
Tilbud pane
Report pane
但是因为我在属性中不会有相同的值 - 我必须对元素进行排序。
这就是我所拥有的:
<?xml version = "1.0" encoding = "utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<ul>
<xsl:for-each select="Parent">
<li>
<xsl:value-of select="@text"/>
<ul>
<xsl:for-each select="Parent/child"/>
<li>
<xsl:value-of select="@text"/>
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>
我必须得到的所需html是这样的:
<ul>
<li>Parent
<ul>
<li>Child</li>
<li>Child</li>
.....
</ul>
</li>
<li>Parent
<ul>
<li>Child</li>
<li>Child</li>
.....
</ul>
</li>
.....
</ul>
但显然它不想给我这个......它<ul/>
在我运行转换后给我......