如何用XSLT生成带CDATA段的xml文档?

transj 2006-10-13 10:23:57
问题如下:

被转换的XML: input.xml
<?xml version="1.0" encoding="UTF-8"?>
<row>
<ident>10</ident>
<dckid>10699</dckid>
</row>

产生的XML: output.xml
<?xml version="1.0" encoding="UTF-8"?>
<ExceptionMessage>
<docsMessage><![CDATA[10
10699]]></docsMessage>
</ExceptionMessage>

我所想生成的XML:
<?xml version="1.0" encoding="UTF-8"?>
<ExceptionMessage>
<docsMessage><![CDATA[
<ident>10</ident>
<dckid>10699</dckid>
]]></docsMessage>
</ExceptionMessage>

我使用的XSLT 文件:
XSLT 文件:
<?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" indent="yes" omit-xml-declaration="no" cdata-section-elements="docsMessage"/>

<xsl:template match="/">
<ExceptionMessage>
<xsl:element name="docsMessage">

<xsl:value-of select="row" disable-output-escaping="no"/>

</xsl:element>
</ExceptionMessage>

</xsl:template>
</xsl:stylesheet>

...全文
536 点赞 收藏 6
写回复
6 条回复
cds27 2006年10月16日
写错了,
<xsl:copy-of select="root/*"/>
改为:
<xsl:copy-of select="row/*"/>
回复 点赞
cds27 2006年10月16日
关键语句: <xsl:copy-of select="root/*"/>
回复 点赞
cds27 2006年10月16日
<?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" indent="yes" omit-xml-declaration="no" cdata-section-elements="docsMessage"/>

<xsl:template match="/">
<ExceptionMessage>
<xsl:element name="docsMessage">

<xsl:copy-of select="root/*"/>

</xsl:element>
</ExceptionMessage>

</xsl:template>
</xsl:stylesheet>
回复 点赞
影子传说_Hades 2006年10月13日
#######给分给分,累死拉!!###############
<?xml version="1.0" encoding="UTF-8"?>
<row>
<ident>10</ident>
<dckid>10699</dckid>
</row>


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
method="xml"
version="1.0"
encoding="GBK"
indent="yes"/>
<xsl:template match="/">
<ExceptionMessage>
<docsMessage>
<xsl:text disable-output-escaping="yes">
<![CDATA[
</xsl:text>
<xsl:call-template name="copyNode" />
<xsl:text disable-output-escaping="yes">
]]>
</xsl:text>
</docsMessage>
</ExceptionMessage>
</xsl:template>
<xsl:template match="@*|node()" name="copyNode">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>




public static void xsltConvert(String xmlSourceFile,
String xsltSourceFile,
OutputStream out) {
try {
File xmlFile = new File(xmlSourceFile);
File xsltFile = new File(xsltSourceFile);

Source xmlSource = new StreamSource(xmlFile);
Source xsltSource = new StreamSource(xsltFile);
Result result = new StreamResult(out);

TransformerFactory transFact = TransformerFactory.newInstance();
Transformer trans = transFact.newTransformer(xsltSource);
//给参数传递值
//trans.setParameter("image","B.jpg");
//trans.clearParameters();
trans.transform(xmlSource, result);
} catch (Exception ex) {
ex.printStackTrace();
}
}


生成---------------->
<?xml version="1.0" encoding="GBK"?>
<ExceptionMessage>
<docsMessage>
<![CDATA[

<row>
<ident>10</ident>
<dckid>10699</dckid>
</row>
]]>
</docsMessage>
</ExceptionMessage>
回复 点赞
影子传说_Hades 2006年10月13日
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="1.xsl"?>
<row>
<ident>10</ident>
<dckid>10699</dckid>
</row>

<?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" indent="yes" omit-xml-declaration="no" cdata-section-elements="docsMessage"/>

<xsl:template match="/">
<ExceptionMessage>
<xsl:element name="docsMessage">

<xsl:value-of select="row" disable-output-escaping="no"/>

</xsl:element>
</ExceptionMessage>

</xsl:template>
</xsl:stylesheet>

--------------------------->结果是 10 10699
楼主是如何得到
<?xml version="1.0" encoding="UTF-8"?>
<ExceptionMessage>
<docsMessage><![CDATA[10
10699]]></docsMessage>
</ExceptionMessage>

??
回复 点赞
zghmu007 2006年10月13日
路过 帮顶
回复 点赞
发动态
发帖子
Java EE
创建于2007-09-28

3.7w+

社区成员

22.5w+

社区内容

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区公告
暂无公告