我有一个XML文档,其中包含一个节点,其中包含另一个对象的转义XML序列化,如下例所示:
<attribute>
<value>
<map>
<item>
<src>something</src>
<dest>something else</dest>
</item>
</map>
</value>
</attribute>
如何将xslt模板应用于内部xml?特别是,我想得到一对夫妇src / dest的HTML表格。
| src | dest |
| something | something else |
答案 0 :(得分:7)
我这样做是为了两步操作。
Step1.xsl:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="/">
<root>
<xsl:apply-templates select="attribute/value" />
</root>
</xsl:template>
<xsl:template match="value">
<object>
<xsl:value-of select="." disable-output-escaping="yes" />
</object>
</xsl:template>
</xsl:stylesheet>
生成中间XML:
<root>
<object>
<map>
<item>
<src>something</src>
<dest>something else</dest>
</item>
</map>
</object>
</root>
Step2.xsl
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="object">
<table>
<tr>
<xsl:for-each select="map/item/*">
<th>
<xsl:value-of select="name()" />
</th>
</xsl:for-each>
</tr>
<tr>
<xsl:for-each select="map/item/*">
<td>
<xsl:value-of select="." />
</td>
</xsl:for-each>
</tr>
</table>
</xsl:template>
</xsl:stylesheet>
生成HTML表格
<table>
<tr>
<th>src</th>
<th>dest</th>
</tr>
<tr>
<td>something</td>
<td>something else</td>
</tr>
</table>
答案 1 :(得分:1)
将value
属性解压缩到它自己的XML文档中并对其进行转换。
如果没有很多子字符串替换,您将无法在单个XSLT中执行此操作。
如果您可以控制XML文档的格式,请考虑将节点数据放入CDATA部分,而不是转义&lt; {}。和&gt;。