我有以下模板,创建一个 xml。一个模板中有多个相似的代码块。根据父元素名称,只有一个元素值。而且我怀疑使用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 等。提前致谢