2016-09-13 2 views
-1

нужно сравнить значение info/targetAudienceInfo/labelLocaleTextID и info/languageTranslation/localeTextID, если он совпадает, то необходимо отобразить значение соответствующего languageTranslation/localeText под <label> тега вместо <xmlTag>.Потребность таблицы стилей XSLT для преобразования снизу входного XML для вывода XML

Аналогично нужно сравнить значение info/targetAudienceInfo/standAloneLabelLocaleTextID и info/languageTranslation/localeTextID, если он совпадает, то необходимо отобразить значение соответствующего languageTranslation/localeTex т под <standAloneLabel> тега вместо <xmlTag> использования XSLT.

Ниже входной 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, тогда будет присутствовать defenitely 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

Это сработало! Спасибо. –

Смежные вопросы