次のテンプレートがあり、xml を作成しています。1 つのテンプレートに複数の同様のコード ブロックがあります。親要素名に応じて、要素値は 1 つだけです。そして、私は完璧なアイデアではif test
なく、代わりに使用することに疑いがありますか? template match
しかし、どうやって?:
<xsl:template match="Adresse">
<!-- TelefonG -> "Telefon Geschäftlich" (ID = 1) -->
<xsl:if test="TelefonG != '' or TelefonGZus != ''">
<xsl:if test="PersonGuid != ''">
<xsl:element name="AdrKontakt">
<KontaktGuid>
<xsl:value-of select="commonFunctions:createGuid()"/>
</KontaktGuid>
<PersonGuid>
<xsl:value-of select="commonFunctions:convertGuid(PersonGuid)"/>
</PersonGuid>
<InfoText>
<xsl:value-of select="commonFunctions:toHtmlEntities(TelefonG)"/>
</InfoText>
<Kommentar>
<xsl:value-of select="commonFunctions:toHtmlEntities(TelefonGZus)"/>
</Kommentar>
<xsl:element name="KontaktTypID">1</xsl:element>
<xsl:the-same-crap/>
</xsl:element>
</xsl:if>
</xsl:if>
<!-- TelefonP -> "Telefon Privat" (ID = 2) -->
<xsl:if test="TelefonP != '' or TelefonPZus != ''">
<xsl:if test="PersonGuid != ''">
<xsl:element name="AdrKontakt">
<xsl:the-same-crap/>
<xsl:element name="KontaktTypID">1</xsl:element>
<xsl:the-same-crap/>
</xsl:element>
</xsl:if>
</xsl:if>
<!-- TelMobil -> "Telefon Mobil" (ID = 3) -->
<xsl:if test="TelMobil != '' or TelMobilZus != ''">
<xsl:if test="PersonGuid != ''">
<xsl:element name="AdrKontakt">
<xsl:the-same-crap/>
<xsl:element name="KontaktTypID">3</xsl:element>
<xsl:the-same-crap/>
</xsl:element>
</xsl:if>
</xsl:if>
<xsl:and-so-on/>
入力 xml は次のようになります。
...
<Adresse>
<PersonGuid>THEGUID01234567890</PersonGuid>
<TelefonP>0878938493</TelefonP>
<TelefonPZus>Some text about this number</TelefonPZus>
<TelefonG>9309340934</TelefonG>
<TelefonGZus>First class customer.</TelefnoGZus>
<TelefonM>090923409</TelefonM>
<TelefonMZus>Mobile because not always in office.</TelefonMZus>
<Email>abuse@bad.com</Email>
<EmailZus>suspect</EmailZus>
<!-- and so one -->
</Adresse>
<Adresse>
<Email>bla@foo.bar</Email>
<TelefonM>0298309283</TelefonM>
<Adresse>
...
同じがらくたを一度だけ書くために、どのようにリファクタリングしますか? スイッチケース?例 TelefonP => 1; TelMobil => 3 など よろしくお願いします