XSLT と XML を使用しています。
まず、2 つの xml に取り組みます。
最初の XML:
<?xml version="1.0"?>
<tcm:ListItems xmlns:tcm="http://www.tridion.com/ContentManager/5.0" ID="tcm:232-83752-2" Managed="10682">
<tcm:Item ID="tcm:232-564598" Title="010 News Mapping"/>
<tcm:Item ID="tcm:232-564599" Title="020 CUGOs"/>
<tcm:Item ID="tcm:232-614307" Title="030 Reserved Urls"/>
</tcm:ListItems>
上記の ID、つまり tcm:232-564598 などを使用して取得する2 番目の XMLは、ID tcm:232-564598 の xml の 1 つであり、他の ID は同じタイプの XML を持ちます。
<tcm:Component ID="tcm:229-564598" IsEditable="false" xmlns:tcm="http://www.tridion.com/ContentManager/5.0" xmlns:xlink="http://www.w3.org/1999/xlink">
<tcm:Data>
<tcm:Content>
<MappingCollection xmlns="uuid:922EEC29-2DE3-4BA1-A46A-A300CB8FA85F">
<VanityUrl>
<old>mbp</old>
<new>/SessionHandler.aspx?pageurl=/BP.aspx&pub=/english&section=IBE&j=f</new>
<dateAdded>2010-05-03T14:45:00</dateAdded>
<comments> News mapping </comments>
</VanityUrl>
<VanityUrl>
<old>about/news</old>
<new>about/news/news.aspx</new>
<dateAdded>2010-05-03T14:45:00</dateAdded>
<comments> News mapping </comments>
</VanityUrl>
</MappingCollection>
</tcm:Content>
</tcm:Data>
</tcm:Component>
上記の両方の XML を使用して、以下の形式の XML を取得しようとしています。
<?xml version="1.0" encoding="UTF-8"?>
<mappings>
<!-- News mapping -->
<mapping old="mbp" new="/SessionHandler.aspx?pageurl=/BP.aspx&pub=/english&section=IBE&j=f"/>
<mapping old="about/news" new="about/news/news.aspx"/>
<!-- CUGO's-->
<mapping old="/nhs" new="/cugo.aspx?promoCode=UKNHS01&pub=/uk/english"/>
<mapping old="/hk/ukstudentfare" new="/cugo.aspx?promoCode=HKSTU10&pub=/hk/Chinese"/>
</mappings>
上記の形式の XML を生成しようとしている XSLT を次に示しますが、うまくいきません。最初の xml はプライマリ xml であり、以下の XSLT を使用して変換されることに注意してください
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tcm="http://www.tridion.com/ContentManager/5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:em="http://www.espire.com/tridion/schemas" xmlns:tcmse="http://www.tridion.com/ContentManager/5.1/TcmScriptAssistant" exclude-result-prefixes="em xlink tcmse tcm">
<xsl:output method="xml" version="1.0" encoding="UTF-16" indent="yes"/>
<!-- root match-->
<xsl:template match="tcm:ListItems">
<mappings>
<xsl:apply-templates select="tcm:Item"/>
</mappings>
</xsl:template>
<xsl:template match="tcm:Item">
<xsl:variable name="doc" select="document(@ID)"/>
<xsl:if test="$doc/tcm:Component/tcm:Data/tcm:Content/em:MappingCollection/em:VanityUrl/em:comments">
<xsl:comment>
<xsl:value-of select="$doc/tcm:Component/tcm:Data/tcm:Content/em:MappingCollection/em:VanityUrl/em:comments"/>
</xsl:comment>
</xsl:if>
<xsl:for-each select="$doc/tcm:Component/tcm:Data/tcm:Content/em:MappingCollection/em:VanityUrl">
<xsl:element name="mapping">
<xsl:if test="$doc/tcm:Component/tcm:Data/tcm:Content/em:MappingCollection/em:VanityUrl/em:old">
<xsl:attribute name="old">
<xsl:value-of select="$doc/tcm:Component/tcm:Data/tcm:Content/em:MappingCollection/em:VanityUrl/em:old"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="$doc/tcm:Component/tcm:Data/tcm:Content/em:MappingCollection/em:VanityUrl/em:new">
<xsl:attribute name="new">
<xsl:value-of select="$doc/tcm:Component/tcm:Data/tcm:Content/em:MappingCollection/em:VanityUrl/em:new"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="$doc/tcm:Component/tcm:Data/tcm:Content/em:MappingCollection/em:VanityUrl/em:dateAdded">
<xsl:attribute name="dateAdded">
<xsl:value-of select="$doc/tcm:Component/tcm:Data/tcm:Content/em:MappingCollection/em:VanityUrl/em:dateAdded"/>
</xsl:attribute>
</xsl:if>
</xsl:element>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
上記の xslt では、データ ループも正しく行われていることがわかりますが、受信しているデータは同じです。つまり、ループは正しく実行されていますが、ノード値は同じです
提案してください!