2016-07-01 9 views
0

XSLTを使用して1行に1要素をルート要素なしで空白なしでフォーマットしようとしています。ここに私のXML入力ファイルは、次のとおりです。XSLTを使用して要素ごとにルートの1行をコピーする方法

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

私は現在、私のXLSTパーサーと私の現在のXML出力としてサクソン9.7を使用していますすべての要素をルートを含む1行に表示します。私は適用-テンプレートが<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> 

は私がルート・タグなどなしに、出力ファイルに各アカウントごとに1つのラインを持っているしたいと思います次の:

<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

ルート要素はいくつかありますが、いくつかの最上位要素がある場合は、整形式XML文書を作成することさえできません。あなたはそれが望ましい出力であると確信していますか? –

+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を必要としない処理します。

+0

ありがとうマーティン、それは魅力のように動作しますが、最初のテンプレートだけで動作します。私は両方のテンプレート宣言を使用する場合、私は空白の出力ファイルを取得します。 –

関連する問題