我知道这很容易,但我尝试过,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>
和<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/>
...
答案 0 :(得分:1)
您的XSLT不起作用,因为它直接在Parent
搜索/
,但中间有TreeView
。
<xsl:template match="/TreeView">
...
答案 1 :(得分:0)
以下是执行转换的样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8"/>
<xsl:template match="/">
<ul>
<xsl:apply-templates/>
</ul>
</xsl:template>
<xsl:template match="Parent">
<li>
<xsl:value-of select="@text"/>
<br/>
<ul>
<xsl:apply-templates select="child"/>
</ul>
</li>
</xsl:template>
<xsl:template match="child">
<li><xsl:value-of select="@text"/></li>
</xsl:template>
</xsl:stylesheet>
如果您只想要文字输出:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>
<xsl:template match="Parent">
<xsl:value-of select="@text"/>
<xsl:text>
 </xsl:text>
<xsl:apply-templates select="child"/>
</xsl:template>
<xsl:template match="child">
<xsl:text> </xsl:text>
<xsl:value-of select="@text"/>
<xsl:text>
 </xsl:text>
</xsl:template>
</xsl:stylesheet>