2017-02-09 1 views
0

を削除するときにXSLTのインデントが失われた私は、次のxmlファイルを持っているノード

<?xml version="1.0" encoding="UTF-8"?> 
<start> 
    <param_1>   
     <short_name>parameter_a</short_name> 
    </param_1> 
    <param_2>   
     <short_name_2>parameter_b</short_name_2> 
    </param_2> 
</start> 

と私は次のXSLTファイルがあります。これは私が

<?xml version="1.0" encoding="utf-8"?> 
<gml:description>parameter_a</gml:description> 
<gml:description>parameter_b<om:observedProperty xlink:href="parameter_b"/></gml:description> 
を得る出力され

<?xml version="1.0" encoding="UTF-8"?>   
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:xlink="http://www.w3.org/1999/xlink"> 
     <xsl:output method="xml" indent="yes" encoding="utf-8" />  
    <xsl:template match="/" > 
     <gml:description> 
        <xsl:value-of select="document('/path/to/mydoc.xml')/start/param_1/short_name"/> 
    </gml:description> 
    <gml:description> 
      <xsl:for-each select="document('/path/to/mydoc.xml')/start/param_2"> 
       <xsl:variable name="my_xlink" select="short_name_2"/> 
        <xsl:value-of select="$my_offering1_observed_property_xlink"/>  
       <om:observedProperty xlink:href="{$my_offering1_observed_property_xlink}"/> 
       </xsl:for-each> 
    </gml:description> 
</xsl:template> 
</xsl:stylesheet> 

問題は私が望むものはこの結果です

<?xml version="1.0" encoding="utf-8"?> 
    <gml:description>parameter_a</gml:description> 
    <om:observedProperty xlink:href="parameter_b"/> 

が、私は私のXSLTファイルノードから<gml:description>を削除した場合、最終的なXMLはそのインデントを失った:

<?xml version="1.0" encoding="utf-8"?> 
     <gml:description>parameter_a</gml:description><om:observedProperty xlink:href="parameter_b"/> 

あなたは私が間違ってやっているものを私に教えてくださいだろうか?

おかげ

+1

名前空間宣言とXSLを含む、あなたの完全なXSLTを投稿してください。 - 期待される出力は、整形式XML文書ではないことに注意してください(単一のルート要素が欠けています)。お使いのプロセッサによっては、インデントが不足している可能性があります。 –

+0

こんにちはmichael、 私は名前空間の宣言を追加しました。 宣言やプロセッサの問題かどうかわかりません。なぜなら、のままにしておくと動作するからです。 私はおそらく何かを誤解しています –

+0

あなたのXSLTに誤りがあります。たとえば、 ''に対して2つの一致があり、いくつかの終了タグがありません。このコードと[mcve]の間にはある程度の距離があります。 – zx485

答えて

1

これはlibxsltプロセッサの癖のようです。私はあなたのオリジナルの結果を再現することができませんから、

<?xml version="1.0" encoding="UTF-8"?> 
<description/><observedProperty/> 

回避策*がある場合、私は知らない。返し

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/"> 
    <description/> 
    <observedProperty/> 
</xsl:template> 

</xsl:stylesheet> 

:私は正常にこの最小限のスタイルシートを使用して問題を再現しております。両方の場合の結果は、ルート要素のないXMLフラグメントであるため、正当な理由があるとは確信していません。もちろん、除い


(*)、明白:出力設定:

<xsl:template match="/"> 
    <description/> 
    <xsl:text>&#10;</xsl:text> 
    <observedProperty/> 
</xsl:template> 
+0

実際には、私の問題を見ると、別の観点から見ると、最終的に達成したいのは、変数" parameter_b "を使用して、" for-each "サイクルを使用して抽出することができます。 アイデア –

+0

@ sylar_80これはあなたの質問とは何かが関係しているのですが、これは字下げに関するものでした。出力の* content *に問題がある場合(*フォーム*とは対照的に)、新しい質問に投稿してください。 –

+0

私は問題を解決しました。 あなたの入力に感謝! –