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

发布于 2024-10-20 14:36:30 字数 1213 浏览 0 评论 0原文

我已使用 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 格式获取它。

请帮助我。

I have transformed one XML file to an another XML file (in desired structure) using XSLT. However i am unable to view the transformed file in XML format. It shows me plain text values.

This is my original XML file :

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

And i coverted it to my desired output using the following 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>

I get the output as

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

I can see that what ever XSLT i have implemented is showing the correct result but i need to get this in XML format.

Kindly help me.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一抹微笑 2024-10-27 14:36:30

我认为您想要这个

<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 的子级 - 它是同级

I think you want this:

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

when this transformation is applied on the provided XML document:

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

the wanted result is produced:

<IMPORT_ID SEQ_NO="1"/>

Explanation:

  1. All text nodes are matched by a template with empty body, which overrides the default XSLT processing, so the text nodes are now not copied to the output.

  2. SEQ_NO is not a child of IMPORT_ID -- it is a sibling.

九厘米的零° 2024-10-27 14:36:30

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

Do not use a browser. use a real xslt processor such as http://saxon.sourceforge.net.

被你宠の有点坏 2024-10-27 14:36:30

您将获得默认输出,这意味着您的 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>

You are getting the default output, which means that your IMPORT_ID template is not executing.

Try the following templates instead:

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

<xsl:template match="Table"> 
    <IMPORT_ID SEQ_NO="{SEQ_NO}/{IMPORT_ID}"/> 
</xsl:template>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文