3

私は入力ファイルに持っています:

<a></a>
<b/>
<c>text</c>

これを文字列に変換する必要があります。トランスを使用して、出力を下回っています:

<a/> <!-- Empty tags should not collapse-->
<b/>
<c>text</c>

xslt を使用し、出力方法が「HTML」の場合、次の出力が得られます。

<a></a> <!-- This is as expected-->
<b></b> <!-- This is not expected-->
<c>text</c>

入力ファイルと同じ構造にしたい。インデックスを計算する必要があり、インデックス計算ロジックを変更するのは非常に難しいため、アプリケーションで必要です。

使用する正しい XSLT は何ですか?

4

2 に答える 2

0

XSLT プロセッサは何ですか? XSLT は単に xml を変換するための言語であるため、「html 出力」はプロセッサに依存します。

この最初の解決策はあなたにとって単純すぎると思いますが、生の html の処理を​​避けるためにこれを使用する必要がありました

<xsl:copy-of select="child::node()" /> 

これは生の入力を複製する必要があるためです。私の場合、以下を使用して raw 属性を持つすべてのノードを抽出しました。

<xsl:for-each select="xmlData//node()[@raw]">
            <xsl:copy-of select="child::node()" />
</xsl:for-each>

その他のオプション:

2) 後で実行する内容に応じて、各空のノードに属性を追加します。つまり、role="long"、role="short-hand" です。

3) 各ノードをループします (xsl:for-each)

<xsl:choose>
<xsl:when test="string-length(.)=0"> <!-- There is no child-->
<xsl:copy-of select="node()" />
</xsl:when>
<xsl:otherwise>
...whatever normal processing you have
</xsl:otherwise>

4) 問題を再定義します。どちらも有効な XHTML/XML であるため、問題を別の場所で再構成または修正できる可能性があります。

いずれにしても、問題を再現してローカルでテストできるように、質問にさらに情報を追加することをお勧めします。

PSコメントに入れるにはテキスト/コードが多すぎますが、それはこれが属する場所です。

于 2015-03-24T06:53:28.713 に答える