2016-07-22 11 views
0

XML出力がスキーマに対して定義されておらず、最適ではないレガシーシステムを扱っているため、実際に独自のより良いスキーマを定義し、受け取ったXMLにXSL変換を適用して一致させます。このフィールドは、特別な 『マジック値』を持っている場合与えられた要素に特定の「魔法の値」がある場合、新しいXML要素を挿入しますか?

は 受け取ったXMLで

一つの特別なケースでは、「ああ、それは通常に別の何かを意味しているので、我々はルールを追加する例が与えられた:。。

<SomeObject> 
    <Id>123</123> 
    <UpdateCount>-1</UpdateCount> 
</SomeObject> 

出力:理想的には

<SomeObject> 
    <Id>123</123> 
    <UpdateCount xsi:nil='true'/> //we don't HAVE to have this but it's preferred 
    <Deleted>true</Deleted> 
</SomeObject> 

UpdateCountの他のすべての値のために、我々は<Deleted>false</Deleted>を追加することになりますが、再び、これは必須ではありません、我々はそれだけで物事が少し厄介になり、このプロパティはオプションにすることができ

。あなたが行うことができ

答えて

1

<xsl:template match="UpdateCount[. = -1]"> 
    <UpdateCount xsi:nil="true"/> 
    <Deleted>true</Deleted> 
</xsl:template> 

または:

<xsl:template match="UpdateCount"> 
    <xsl:choose> 
     <xsl:when test=". = -1"> 
      <UpdateCount xsi:nil="true"/> 
      <Deleted>true</Deleted> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:copy-of select="."/> 
      <Deleted>false</Deleted> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 
+0

をあなたの第二の例は、それが削除された条件に一致する_doesn't_とき 'UpdateCount'を削除しているようだ - そう、これは正常に動作します。これを元の値に戻すには、コピー命令および/または 'else'要素が必要ですか? –

+0

編集されたバージョンを参照してください。 –

関連する問題