使用XSLT将xml转换为html

时间:2013-08-19 12:57:55

标签: xml xslt xslt-1.0 xslt-grouping

我知道这很容易,但我尝试过,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/> ...

2 个答案:

答案 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>&#xa;  </xsl:text>
        <xsl:apply-templates select="child"/>
    </xsl:template>

    <xsl:template match="child">
        <xsl:text>  </xsl:text>
        <xsl:value-of select="@text"/>
        <xsl:text>&#xa;  </xsl:text>
    </xsl:template>

</xsl:stylesheet>