在xslt中保存html标签

时间:2016-08-15 11:44:17

标签: html xml xslt

[更新]

我找到了解决办法!)我所注意的只是使用<xsl:copy-of select="dc:Document"> instead of <xsl:value-of select="dc:Document">。谢谢大家)

我需要使用xslt转换xml文件。我可以转换我的xml文件的大部分内容但是在转换过程中保存html标签时有问题。我需要保存标记<Document>...</Document>的所有格式化而不做任何更改。我认为我必须将一些归因于标记

<?xml version="1.0" encoding="utf-16"?>
<MyItem xmlns="http://schemas.datacontract.org/2004/07/WeekReportJob" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<JobPos>Boss</JobPos>
<Document>
<p>
<span>Table 1</span>
</p>
<table>
<tr>
	<td align="left" valign="top">
		<p>
			<span>Cell 1</span>
		</p>
	</td>
	<td align="left" valign="top" colspan="2">
		<p>
			<span>Cell 2</span>
		</p>
	</td>
</tr>
</table>
</Document>
</MyItem>

我的XSLT文件是

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dc="http://schemas.datacontract.org/2004/07/WeekReportJob" 
xmlns:a="http://schemas.datacontract.org/2004/07/DataBaseModel.EF">

<xsl:template match="/">
  <html>
  <body>
<xsl:value-of select="dc:MyItem/dc:JobPos" />
<xsl:value-of select="dc:MyItem/dc:Document" />
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

我想要以下结果

Boss
<p>
<span>Table 1</span>
</p>
<table>
<tr>
	<td align="left" valign="top">
		<p>
			<span>Cell 1</span>
		</p>
	</td>
	<td align="left" valign="top" colspan="2">
		<p>
			<span>Cell 2</span>
		</p>
	</td>
</tr>
</table>

有可能吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试以下样式表:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:dc="http://schemas.datacontract.org/2004/07/WeekReportJob" 
    xmlns:a="http://schemas.datacontract.org/2004/07/DataBaseModel.EF" exclude-result-prefixes="dc a">

    <xsl:strip-space elements="*"/>
    <xsl:output omit-xml-declaration="yes" indent="yes"/>

    <xsl:template match="/">
        <html>
            <body>
                <xsl:value-of select="dc:MyItem/dc:JobPos" />
                <xsl:apply-templates select="dc:MyItem/dc:Document/node()" />
            </body>
        </html>
    </xsl:template>

    <!-- remove namespaces -->
    <xsl:template match="dc:*">
        <xsl:element name="{local-name()}">
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>