JavaプログラムでXSLT前処理を実行しているときに問題が発生しました。メインフレームプログラムが値を空白にしたい場合は、アスタリスク(*)を取得します。これは、Javaプロセスが空白または空のタグのように処理する必要があります。したがって、jaxbプロセスの前にxsltを入力に適用します。
このxsltを適用しています:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="no"/>
<xsl:template match="@*[. = '*']">
<xsl:attribute name="{name()}" namespace="{namespace-uri()}">
<xsl:text></xsl:text>
</xsl:attribute>
</xsl:template>
<xsl:template match="*[. = '*']">
<xsl:copy>
<xsl:text></xsl:text>
</xsl:copy>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
上記のxsltは、ほとんどすべてのテストケースで正常に機能します。サブ要素が1つだけで、それがたまたまアスタリスクである場合を除きます。
たとえば、入力でこれを考慮してください。
<MYROOT><Address3><Line2>*</Line2><Line3>*</Line3></Address3></MYROOT>
うまく機能します。次の出力が生成されます。
<MYROOT><Address3><Line2/><Line3/></Address3></MYROOT>
ただし、以下のxml入力は、誤った応答を生成します。
<MYROOT><Address4><PermanentAddress><Line2>*</Line2></PermanentAddress></Address4></MYROOT>
しかし、応答を与える代わりに
<MYROOT><Address4><PermanentAddress><Line2></Line2></PermanentAddress></Address4></MYROOT>
それはこれを与えます:
<MYROOT/>
助けてください。コードのテスト中にこのテストケースがなかったので、どんな助けでもありがたいです。