Например, может быть или не быть
Код товара. Если есть, я хочу
только циклически проходить записи, содержащие
этот идентификатор продукта, в противном случае я хочу все
записи.
Мне всегда нужны статьи, где
ID родителя 1073. Если и только если
Идентификатор товара существует, я хочу статьи
где идентификатор продукта находится в
relatedProducts
список.
Используйте
<xsl:variable name="vDesiredArticles" select=
"/*/Article[@parentID='1073'
or
contains(concat(',',relatedProducts,','),
concat(',', $pProductId, ',')
)
]"/>
Вот полный и краткий пример :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="pProductId" select="1077"/>
<xsl:template match="/">
<xsl:variable name="vDesiredArticles" select=
"/*/Article[@parentID='1073'
or
contains(concat(',',relatedProducts,','),
concat(',', $pProductId, ',')
)
]"/>
<xsl:copy-of select="$vDesiredArticles"/>
</xsl:template>
</xsl:stylesheet>
когда это преобразование применяется к следующему документу XML (на основе предоставленного в Обновлении, но сделанного более интересным):
<Knowledgebase id="1073" parentID="-1" level="1" writerID="0"
creatorID="0" nodeType="1062" template="1083" sortOrder="5"
createDate="2011-04-20T13:43:41" updateDate="2011-05-11T14:34:23"
nodeName="Knowledgebase" urlName="knowledgebase" writerName="Chris"
creatorName="Chris" path="-1,1073" isDoc="">
<pageTitle>Knowledgebase</pageTitle>
<metaDescription>knowledgebase</metaDescription>
<metaKeywords>knowledgebase</metaKeywords>
<umbracoUrlName />
<Article id="1074" parentID="1073" level="2"
writerID="0" creatorID="0" nodeType="1063" template="1084"
sortOrder="1" createDate="2011-04-20T13:44:13"
updateDate="2011-05-16T09:39:12"
nodeName="What is the answer to this question?"
urlName="what-is-the-answer-to-this-question" writerName="Chris"
creatorName="Chris" path="-1,1073,1074" isDoc="">
<title>Change 2 Test 2</title>
<summary>Change 2 Test 2</summary>
<description> <p><strong>Change 2 Test 2<br /> </strong></p> </description>
<relatedProducts>1071,1076</relatedProducts>
<pageTitle>asd</pageTitle>
<metaDescription>asd</metaDescription>
<metaKeywords>asd</metaKeywords>
<umbracoUrlName />
</Article>
<Article id="1082" parentID="1073" level="2" writerID="0" creatorID="3" nodeType="1063" template="1084" sortOrder="2" createDate="2011-05-04T09:59:31" updateDate="2011-05-11T14:34:23" nodeName="Question 2" urlName="question-2" writerName="Chris" creatorName="Content Writer" path="-1,1073,1082" isDoc="">
<title>test</title>
<summary>test 22</summary>
<description> <p>tst</p> </description>
<relatedProducts>1075</relatedProducts>
<pageTitle />
<metaDescription></metaDescription>
<metaKeywords></metaKeywords>
<umbracoUrlName />
</Article>
<Article id="1088" parentID="1077" level="2" writerID="0" creatorID="3" nodeType="1063" template="1084" sortOrder="2" createDate="2011-05-04T09:59:31" updateDate="2011-05-11T14:34:23" nodeName="Question 2" urlName="question-2" writerName="Chris" creatorName="Content Writer" path="-1,1073,1082" isDoc="">
<title>test</title>
<summary>test 22</summary>
<description> <p>tst</p> </description>
<relatedProducts>1075,1039,1077</relatedProducts>
<pageTitle />
<metaDescription></metaDescription>
<metaKeywords></metaKeywords>
<umbracoUrlName />
</Article>
<Article id="1089" parentID="1077" level="2" writerID="0" creatorID="3" nodeType="1063" template="1084" sortOrder="2" createDate="2011-05-04T09:59:31" updateDate="2011-05-11T14:34:23" nodeName="Question 2" urlName="question-2" writerName="Chris" creatorName="Content Writer" path="-1,1073,1082" isDoc="">
<title>test</title>
<summary>test 22</summary>
<description> <p>tst</p> </description>
<relatedProducts>1075,1039,1078</relatedProducts>
<pageTitle />
<metaDescription></metaDescription>
<metaKeywords></metaKeywords>
<umbracoUrlName />
</Article>
<Article id="1146" parentID="1073" level="2" writerID="4" creatorID="3" nodeType="1063" template="1084" sortOrder="3" createDate="2011-05-13T15:36:14" updateDate="2011-05-13T15:37:21" nodeName="Question 3" urlName="question-3" writerName="Content Approver" creatorName="Content Writer" path="-1,1073,1146" isDoc="">
<title>Test</title>
<summary></summary>
<description> <p>Test</p> </description>
<relatedProducts />
<pageTitle>Test</pageTitle>
<metaDescription>test</metaDescription>
<metaKeywords>test</metaKeywords>
<umbracoUrlName />
</Article>
</Knowledgebase>
желаемый, правильный результат получается (только статьи с parentID="1073"
или чей relatedProducts
содержит $pProductId
(1077)):
<Article id="1074" parentID="1073" level="2" writerID="0" creatorID="0" nodeType="1063" template="1084" sortOrder="1" createDate="2011-04-20T13:44:13" updateDate="2011-05-16T09:39:12" nodeName="What is the answer to this question?" urlName="what-is-the-answer-to-this-question" writerName="Chris" creatorName="Chris" path="-1,1073,1074" isDoc="">
<title>Change 2 Test 2</title>
<summary>Change 2 Test 2</summary>
<description> <p><strong>Change 2 Test 2<br /> </strong></p> </description>
<relatedProducts>1071,1076</relatedProducts>
<pageTitle>asd</pageTitle>
<metaDescription>asd</metaDescription>
<metaKeywords>asd</metaKeywords>
<umbracoUrlName/>
</Article>
<Article id="1082" parentID="1073" level="2" writerID="0" creatorID="3" nodeType="1063" template="1084" sortOrder="2" createDate="2011-05-04T09:59:31" updateDate="2011-05-11T14:34:23" nodeName="Question 2" urlName="question-2" writerName="Chris" creatorName="Content Writer" path="-1,1073,1082" isDoc="">
<title>test</title>
<summary>test 22</summary>
<description> <p>tst</p> </description>
<relatedProducts>1075</relatedProducts>
<pageTitle/>
<metaDescription/>
<metaKeywords/>
<umbracoUrlName/>
</Article>
<Article id="1088" parentID="1077" level="2" writerID="0" creatorID="3" nodeType="1063" template="1084" sortOrder="2" createDate="2011-05-04T09:59:31" updateDate="2011-05-11T14:34:23" nodeName="Question 2" urlName="question-2" writerName="Chris" creatorName="Content Writer" path="-1,1073,1082" isDoc="">
<title>test</title>
<summary>test 22</summary>
<description> <p>tst</p> </description>
<relatedProducts>1075,1039,1077</relatedProducts>
<pageTitle/>
<metaDescription/>
<metaKeywords/>
<umbracoUrlName/>
</Article>
<Article id="1146" parentID="1073" level="2" writerID="4" creatorID="3" nodeType="1063" template="1084" sortOrder="3" createDate="2011-05-13T15:36:14" updateDate="2011-05-13T15:37:21" nodeName="Question 3" urlName="question-3" writerName="Content Approver" creatorName="Content Writer" path="-1,1073,1146" isDoc="">
<title>Test</title>
<summary/>
<description> <p>Test</p> </description>
<relatedProducts/>
<pageTitle>Test</pageTitle>
<metaDescription>test</metaDescription>
<metaKeywords>test</metaKeywords>
<umbracoUrlName/>
</Article>