我尝试使用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>
由于
答案 0 :(得分:0)
为这些元素编写模板
<xsl:template match="account">
<xsl:copy-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
并且只处理它们
<xsl:template match="/">
<xsl:apply-templates select="//account"/>
</xsl:template>
您不需要身份转换模板,只需要xsl:strip-space
。