我已经使用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格式获取它。
请帮帮我。
答案 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"/>
<强>解释强>:
所有文本节点都由带有空体的模板匹配,这会覆盖默认的XSLT处理,因此文本节点现在不会复制到输出中。
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>