我需要使用XSLTProcessor将xml文档转换为html。
我的xml文档是:
<?xml version="1.0" encoding="utf-8"?>
<items>
<item>
<property title="title1"><![CDATA[data1]]></property>
<property title="title2"><![CDATA[data3]]></property>
<property title="title3"><![CDATA[data3]]></property>
</item>
<item>
<property title="title4"><![CDATA[data4]]></property>
<property title="title5"><![CDATA[data5]]></property>
<property title="title6"><![CDATA[data6]]></property>
</item>
</items>
我必须得到的是:
<html>
<table border="1">
<tr bgcolor="#eee"><td colspan="2">title1: data1</td></tr>
<tr><td> title2</td> <td>data2</td></tr>
<tr><td> title3</td> <td>data3</td></tr>
<tr bgcolor="#eee"><td colspan="2">title4: data4</td></tr>
<tr><td> title5</td> <td>data5</td></tr>
<tr><td> title6</td> <td>data6</td></tr>
</table>
</html>
我的xsl文件现在是:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:php="http://php.net/xsl"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html>
<xsl:apply-templates select="items"/>
</html>
</xsl:template>
<xsl:template match="items">
<table border="1">
<xsl:apply-templates select="item"/>
</table>
</xsl:template>
<xsl:template match="item">
<tr bgcolor="#eee"> <td colspan="2">
<xsl:value-of select="/descendant::*/@*"/>:
<xsl:value-of select="property"/>
</td> </tr>
</xsl:template>
</xsl:stylesheet>
但它只返回第一个标签&#34;属性&#34;。我是xslt的新手,我有什么办法来获取&#34;属性&#34;标记
答案 0 :(得分:1)
您在开始时使用了模板,只需继续执行此操作,编写模板并应用它们:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html>
<xsl:apply-templates select="items"/>
</html>
</xsl:template>
<xsl:template match="items">
<table border="1">
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="item/property[1]">
<tr bgcolor="#eee"> <td colspan="2">
<xsl:value-of select="@title"/>:
<xsl:value-of select="."/>
</td> </tr>
</xsl:template>
<xsl:template match="item/property[not(position() = 1)]">
<tr>
<td><xsl:value-of select="@title"/></td>
<td><xsl:value-of select="."/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
您需要使用for-each
声明
<xsl:template match="item">
<xsl:for-each select = "property">
<tr bgcolor="#eee">
<td colspan="2">
<xsl:value-of select="/descendant-or-self::*/@*"/>:
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
</xsl:template>
我还将您的descendant
更改为descendant-or-self
,使其完全等同于之前的版本。