2016-09-13 66 views
-1

需要比較的 info/targetAudienceInfo/labelLocaleTextIDinfo/languageTranslation/localeTextID的值,如果它接着匹配需要<label>標記,而不是<xmlTag>下顯示各自languageTranslation/localeText的值。需要XSLT樣式表從下方輸入XML變換來輸出XML

同樣需要比較的info/targetAudienceInfo/standAloneLabelLocaleTextIDinfo/languageTranslation/localeTextID的值,如果它匹配,則需要在<standAloneLabel>標籤下,而不是<xmlTag>使用XSLT顯示各自languageTranslation/localeTex噸的值。

下面是輸入XML:

<info> 
    <xmlTag>sender</xmlTag> 
    <displayOrder>103</displayOrder> 
    <targetAudienceInfo> 
    <targetAudienceCode>SERVE</targetAudienceCode> 
    <labelLocaleTextID>417</labelLocaleTextID> 
    <standAloneLabelLocaleTextID>404</standAloneLabelLocaleTextID> 
    </targetAudienceInfo> 
    <languageTranslation> 
    <localeTextID>417</localeTextID> 
    <languageISOCode>ENGLISH</languageISOCode> 
    <languageLocaleID>en-US</languageLocaleID> 
    <localeText>Sender1</localeText> 
    </languageTranslation> 
    <languageTranslation> 
    <localeTextID>404</localeTextID> 
    <languageISOCode>ENGLISH</languageISOCode> 
    <languageLocaleID>en-US</languageLocaleID> 
    <localeText>Sender2</localeText> 
    </languageTranslation> 

下面是所期望的輸出XML:

<info> 
    <label>Sender1</label> 
    <standAloneLabel>Sender2</standAloneLabel> 
    <displayOrder>103</displayOrder> 
    <targetAudienceInfo> 
    <targetAudienceCode>SERVE</targetAudienceCode> 
    <labelLocaleTextID>417</labelLocaleTextID> 
    <standAloneLabelLocaleTextID>404</standAloneLabelLocaleTextID> 
    </targetAudienceInfo> 
    <languageTranslation> 
    <localeTextID>417</localeTextID> 
    <languageISOCode>ENGLISH</languageISOCode> 
    <languageLocaleID>en-US</languageLocaleID> 
    <localeText>Sender1</localeText> 
    </languageTranslation> 
    <languageTranslation> 
    <localeTextID>404</localeTextID> 
    <languageISOCode>ENGLISH</languageISOCode> 
    <languageLocaleID>en-US</languageLocaleID> 
    <localeText>Sender2</localeText> 
    </languageTranslation> 
</info> 
+0

「*如果匹配,則需要顯示的.. *值」 如果它不? –

+0

對不起,我錯過了那部分更新。在輸入xml中,如果存在xml標記,那麼defAreaitely targetAudienceInfo和languageTranslation將存在,並且整個正在重複。您在下面給出的模板很好。謝謝。 –

回答

0

當施加到你的輸入例如以下的樣式表將產生預期的結果。你沒有說如果沒有比賽會發生什麼,或者如果有不止一場比賽。

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:key name="trans" match="languageTranslation" use="localeTextID" /> 

<!-- identity transform --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="xmlTag"> 
    <label> 
     <xsl:value-of select="key('trans', ../targetAudienceInfo/labelLocaleTextID)/localeText" /> 
    </label> 
    <standAloneLabel> 
     <xsl:value-of select="key('trans', ../targetAudienceInfo/standAloneLabelLocaleTextID)/localeText" /> 
    </standAloneLabel> 
</xsl:template> 

</xsl:stylesheet> 
+0

它的工作!謝謝。 –