これは基本的な質問かもしれませんが、この初心者は苦労してグーグルで調べていて、理解できていません。
これに似たxmlドキュメントがあります。
<x99:events xmlns:x99="http://www.foo.com/x99" xmlns:xl="http://www.w3.org/1999/xlink" pubdate="2012-05-29T11:14:14-06:00">
<x99:event xl:href="event.xml?event_id=255918" id="foo" status="new">
<x99:event_id>255918</x99:event_id>
<x99:custom_attribute xmlns:x99="http://www.foo.com/x99" status="new">
<x99:attribute_id>22</x99:attribute_id>
<x99:attribute_value>hi there</x99:attribute_value>
</x99:custom_attribute>
<x99:custom_attribute xmlns:x99="http://www.foo.com/x99" status="new">
<x99:attribute_id>26</x99:attribute_id>
<x99:attribute_value>this is a test</x99:attribute_value>
</x99:custom_attribute>
<x99:custom_attribute xmlns:x99="http://www.foo.com/x99" status="new">
<x99:attribute_id>12</x99:attribute_id>
<x99:attribute_value>Yes</x99:attribute_value>
</x99:custom_attribute>
</x99:event>
</x99:events>
そして、xml を変換する xsl があります。
私の xsl では、custom_attribute ノードをループできる必要があり、attribute_id ごとに、custom_attribute ノードの子ノードに基づいた値を持つノードを作成する必要があることがわかりました。
これが私の擬似コードです。私はこのようなものが必要です。
<xsl:for-each select="x99:custom_attribute">
<xsl:when test="number(x99:attribute_id) = 22>
<x99:text>You chose twenty two and your attribute value is <x99:attribute_value></x99:text>
</xsl:when>
<xsl:when test="number(x99:attribute_id) = 26>
<x99:text>Twenty six is a great answer! and your attribute value is <x99:attribute_value></x99:text></x99:text>
</xsl:when>
</xsl:for-each>
そして、ここに私のxslがあります。
私の xsl スキルは最も基本的なレベルであり、xml もそれほど優れていません。親切な魂が私にアドバイスをくれるでしょうか?私は頭を少し超えています。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xl="http://www.w3.org/1999/xlink"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:b="http://www.someurl.com/b"
xmlns:s="http://www.someurl.com/s"
xmlns:c="http://foo.com/c"
xmlns:x99="http://foo.com/x99"
exclude-result-prefixes="xl x99">
<xsl:param name="base_url" select="''" />
<xsl:param name="session_id" select="''" />
<xsl:param name="TaskDir" select="''" />
<xsl:template match="/">
<xsl:call-template name="SendConfirmationEmail">
<xsl:with-param name="EventID" select="/x99:events/x99:event/x99:event_id"/>
<xsl:with-param name="SiteURL" select="'https://foobar.com/123Test/#details'" />
</xsl:call-template>
<xsl:apply-templates select="node()" />
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template name="SendConfirmationEmail">
<xsl:param name="EventID" select="''"/>
<xsl:result-document>
<schedule>
<job>
<name>Email Confirmation</name>
<active>T</active>
<http>
<body>
<x99:email xmlns:x99="http://foo.com/x99">
<x99:mail>
<x99:body>
<x99:text>Your event ID is <xsl:value-of select="$EventID"/></x99:text>
// I want to be able to loop through my x99:attribute_id values here and create new x99:text nodes.
</x99:body>
</x99:mail>
</x99:email>
</body>
</http>
</job>
</schedule>
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>
率直に言って、私は方法を知る必要があります...
- custom_attribute ノードをループし、ノードごとに x99:text ノードを作成します。
- 子の attribute_id の値に基づく文字列
- attribute_value ノードの内容