获取XML格式的xslt转换文件的输出

时间:2011-03-03 06:29:26

标签: xml browser stylesheet

我已经使用XSLT将一个XML文件转换为另一个XML文件(在所需的结构中)。但是我无法以XML格式查看转换后的文件。它显示了纯文本值。

这是我原来的XML文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="xsl.xsl"?>
<NewDataSet>
<Table>
 <IMPORT_ID>2</IMPORT_ID>
 <SEQ_NO>1</SEQ_NO>
 <LEVEL_TAG>RANDOMISATIONDATA</LEVEL_TAG>
 <INSERTED>2004-01-21T12:42:53+05:30</INSERTED>
 <INSERTED_BY>kfsv433</INSERTED_BY>
</Table>
   </NewDataSet>

我使用以下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="xml" version="1.0" indent="yes"/> 
<xsl:strip-space elements="*"/> 
  <xsl:template match="/"> 
  <xsl:apply-templates /> 
 </xsl:template> 
 <xsl:template match="IMPORT_ID"> 
 <IMPORT_ID SEQ_NO="{SEQ_NO/text()}"/> 
 </xsl:template> 
</xsl:stylesheet>

我得到输出为

1RANDOMISATIONDATA2004-01-21T12:42:53+05:30kfsv433

我可以看到我所实现的XSLT正在显示正确的结果,但我需要以XML格式获取它。

请帮帮我。

3 个答案:

答案 0 :(得分:1)

我想你想要这个

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" indent="yes"/>
    <xsl:strip-space elements="*"/>
    <xsl:template match="/">
        <xsl:apply-templates />
    </xsl:template>
    <xsl:template match="IMPORT_ID">
        <IMPORT_ID SEQ_NO="{following-sibling::SEQ_NO[1]/text()}"/>
    </xsl:template>

    <xsl:template match="text()"/>
</xsl:stylesheet>

在提供的XML文档上应用此转换时:

<NewDataSet>
    <Table>
        <IMPORT_ID>2</IMPORT_ID>
        <SEQ_NO>1</SEQ_NO>
        <LEVEL_TAG>RANDOMISATIONDATA</LEVEL_TAG>
        <INSERTED>2004-01-21T12:42:53+05:30</INSERTED>
        <INSERTED_BY>kfsv433</INSERTED_BY>
    </Table>
</NewDataSet>

生成了想要的结果

<IMPORT_ID SEQ_NO="1"/>

<强>解释

  1. 所有文本节点都由带有空体的模板匹配,这会覆盖默认的XSLT处理,因此文本节点现在不会复制到输出中。

  2. SEQ_NO IMPORT_ID的孩子 - 这是一个兄弟

答案 1 :(得分:1)

不要使用浏览器。使用真正的xslt处理器,例如http://saxon.sourceforge.net

答案 2 :(得分:0)

您将获得默认输出,这意味着您的IMPORT_ID模板未执行。

请尝试使用以下模板:

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

<xsl:template match="Table"> 
    <IMPORT_ID SEQ_NO="{SEQ_NO}/{IMPORT_ID}"/> 
</xsl:template>