2011-03-03 70 views
1

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

这是我原来的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它coverted我想要的输出:

<?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

你可能会格式化你回答更好(使用正确的“代码”格式),所以我们可以看到输出是什么样子?另外,你能否提供一个XSLT的片段? – FarligOpptreden 2011-03-03 06:38:13

+0

好问题,+1。查看我的答案,获得完整,简短的解决方案和解释。 :) – 2011-03-03 07:25:25

+1

你说你无法将结果视为XML,但你没有说明你是如何尝试的。你使用浏览器吗?一个文本编辑器?如果“It”显示纯文本值,那么“它”到底是什么? – 2011-03-03 08:49:56

回答

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_NOIMPORT_ID一个孩子 - 这是一个兄弟

+0

非常感谢,这是非常丰富的信息!但是当我执行XML时,它没有显示任何结果,我怀疑XML是否正确。我在这里包括它,你能检查吗?<?xml version =“1.0”encoding =“ISO-8859-1”?> <?xml-stylesheet type =“text/xsl”href =“xsl。 XSL“>

RANDOMISATIONDATA 2004-01-21T12:42:53 + 05:30 kfsv433
hima 2011-03-03 08:16:45

+0

1作出解释。 – Flack 2011-03-03 08:17:26

+0

@hima:是的,我发表了他们的答案,然后发表。使用我拥有的所有7个XSLT 1.0处理器运行时,此转换会产生相同的正确结果。似乎您在浏览器中使用XSLT,并且XSLT处理器可能有问题,或者您可能试图对第一次转换的结果应用第二次转换,而AFAIR IE不支持该转换。 – 2011-03-03 13:48:40

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> 
+0

非常感谢。但是,当你说响应,你的意思是在我原来的XML文件? – hima 2011-03-03 06:46:55

+0

对不起,我误解了这个问题。看到我修改后的答案。 – harpo 2011-03-03 06:52:43

+0

我还没有得到任何输出,页面仍然是空白的:( – hima 2011-03-03 09:21:36