如何使用XSLT

时间:2016-07-01 20:04:19

标签: xml xslt

我尝试使用XSLT格式化XML文件,每行一个元素,没有根元素,没有空格。这是我的XML输入文件:

<?xml version="1.0" encoding="UTF-8"?>
<bank>
    <account>
        <acct_num></acct_num>
        <holder_name></holder_name>
        <holder_address></holder_address>
        <attr>
            <attr_type></attr_type>
            <attr_value></attr_value>
        </attr>
        <attr>
            <attr_type></attr_type>
            <attr_value></attr_value>
        </attr>
        <attr>
            <attr_type></attr_type>
            <attr_value></attr_value>
        </attr>
    </account>
    <account>
        <acct_num></acct_num>
        <holder_name></holder_name>
        <holder_address></holder_address>
        <attr>
            <attr_type></attr_type>
            <attr_value></attr_value>
        </attr>
        <attr>
            <attr_type></attr_type>
            <attr_value></attr_value>
        </attr>
        <attr>
            <attr_type></attr_type>
            <attr_value></attr_value>
        </attr>
    </account>
</bank>

到目前为止,这是我的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" indent="no" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="node()">
    <xsl:copy>
        <xsl:apply-templates select="node()"/>
    </xsl:copy>
</xsl:template>

我目前正在使用Saxon 9.7作为我的XLST解析器,而我当前的XML输出只显示一行中的所有元素,包括root。我已尝试将apply-templates select更改为<xsl:apply-templates select="account|node()"/>,但我在输出中不断获取根标记<bank></bank>

<bank><account><acct_num/><holder_name/><holder_address/><attr><attr_type/><attr_value/></attr><attr><attr_type/><attr_value/></attr><attr><attr_type/><attr_value/></attr></account><account><acct_num/><holder_name/><holder_address/><attr><attr_type/><attr_value/></attr><attr><attr_type/><attr_value/></attr><attr><attr_type/><attr_value/></attr></account></bank>

我希望每个帐户只有一行输出文件,没有root标记,如下所示:

<account><acct_num></acct_num><holder_name></holder_name><holder_address></holder_address><attr><attr_type></attr_type><attr_value></attr_value></attr><attr><attr_type></attr_type><attr_value></attr_value></attr></account>
<account><acct_num></acct_num><holder_name></holder_name><holder_address></holder_address><attr><attr_type></attr_type><attr_value></attr_value></attr><attr><attr_type></attr_type><attr_value></attr_value></attr></account>

由于

1 个答案:

答案 0 :(得分:0)

为这些元素编写模板

<xsl:template match="account">
  <xsl:copy-of select="."/>
  <xsl:text>&#10;</xsl:text>
</xsl:template>

并且只处理它们

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

您不需要身份转换模板,只需要xsl:strip-space