XSL如何分别处理子元素?

时间:2015-11-15 17:27:09

标签: xml xslt

我想从嵌套部分分别渲染xml的非嵌套部分。例如,可以渲染这个xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="para.xsl"?>
<paragraph>Introduction
  <list> 
   <element>First</element>
   <element>Second</element>
  </list>
</paragraph>

作为

<p>Introduction
<ul>
   <li>First</li>
   <li>Second</li>
  </ul>
</p>

我的样式表(不起作用)是

<?xml version="1.0" encoding="UTF-8"?>    
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <xsl:apply-templates select="paragraph" />
</xsl:template>

<xsl:template match="paragraph"  >
  <p><xsl:value-of select="*[not(list)]"/></p>
  <xsl:apply-templates select="list" />
</xsl:template>

<xsl:template match="list"  >
  <ul><xsl:apply-templates select="element"/></ul>
</xsl:template>

<xsl:template match="element"  >
  <li><xsl:value-of select="."/></li>
</xsl:template>    
</xsl:stylesheet >

呈现为

<p> 
   First
   Second
  </p>
<ul>
<li>First</li>
<li>Second</li>
</ul>

1 个答案:

答案 0 :(得分:1)

  

我想将xml的非嵌套部分与。分开   嵌套部分。

嵌套没有问题,因为这需要处理 XSLT processing model XSLT built-in templates - 请阅读有关这些主题的更多内容或观看 XSLT training course 。您只需覆盖内置模板,如下所示。

就这么简单

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

  <xsl:template match="paragraph">
   <p><xsl:apply-templates/></p>
  </xsl:template>

  <xsl:template match="list">
   <ul><xsl:apply-templates/></ul>
  </xsl:template>

  <xsl:template match="element">
   <li><xsl:apply-templates/></li>
  </xsl:template>
</xsl:stylesheet>