XML データをループして、XML 入力の部分文字列がパラメーター TagIDs に含まれているかどうかを判断しようとしています。入力の例を次に示します。
<in:inputs xmlns:in="http://www.composite.net/ns/transformation/input/1.0">
<!-- Input Parameter, XPath /in:inputs/in:param[@name='TagTypeCode'] -->
<in:param name="TagTypeCode">USC_CATEGORY_tags</in:param>
<!-- Input Parameter, XPath /in:inputs/in:param[@name='keyword'] -->
<in:param name="keyword"/>
<!-- Input Parameter, XPath /in:inputs/in:param[@name='TagIDs'] -->
<in:param name="TagIDs">,2704,2764,</in:param>
<!-- Function Call Result (2 ms), XPath /in:inputs/in:result[@name='SolrSearchResults']/response -->
<in:result name="SolrSearchResults">
<response xmlns="">
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1</int>
<lst name="params">
<str name="facet">true</str>
<str name="start">0</str>
<str name="q">*:* AND tagids:2704 AND tagids:2764</str>
<str name="facet.field">USC_CATEGORY_tags</str>
<str name="rows">0</str>
</lst>
</lst>
<result name="response" numFound="0" start="0"/>
<lst name="facet_counts">
<lst name="facet_queries"/>
<lst name="facet_fields">
<lst name="USC_CATEGORY_tags">
<int name="2703.Best Sellers">0</int>
<int name="2704.New Release">0</int>
<int name="2705.Training Products">0</int>
<int name="2706.AICP Exam Prep">0</int>
<int name="2707.PAS Reports">0</int>
<int name="2709.PAS Super Sale">0</int>
<int name="2722.Books Big Sale 2013">0</int>
<int name="2723.Books Big Sale 2013 - 20% Off">0</int>
<int name="2724.Books Big Sale 2013 - 50% Off">0</int>
<int name="2725.Books Big Sale 2013 - 80% Off">0</int>
<int name="2734.eBook Landing Page">0</int>
<int name="2736.eBook Landing Page">0</int>
</lst>
</lst>
<lst name="facet_dates"/>
<lst name="facet_ranges"/>
</lst>
</response>
</in:result>
/in:inputs/in:result[@name='SolrSearchResults']/response/lst[@name='facet_counts']/lst[@name='facet_fields']/lst/int をループして判断することは可能ですか? @name 属性 ('.' の前の部分文字列) が TagIDs パラメータに含まれている場合、変数に何らかの値を設定しますか? 最も効率的な方法は何ですか?
これが私が試したことです
<xsl:variable name="root" select="/in:inputs/in:result[@name='SolrSearchResults']/response" />
<xsl:variable name="TagIDs" select="/in:inputs/in:param[@name='TagIDs']" />
<xsl:variable name="facet_selected" select="0"/>
<xsl:for-each select="$root/lst[@name='facet_counts']/lst[@name='facet_fields']/lst/int">
<xsl:if test="contains($TagIDs,concat(',',substring-before(@name,'.'),','))" >
<xsl:variable name="facet_selected" select="1" />
</xsl:if>
</xsl:for-each>
正しい方向に向けていただければ幸いです。