【发布时间】:2011-12-26 10:04:13
【问题描述】:
我有一个带递归的 XSLT,我在 for-each 循环中调用递归
<xsl:for-each select="$ChildList">
<!-- Get the new elNodeList here and recurse -->
<xsl:variable name="inp" select="current()"></xsl:variable>
<xsl:variable name="NewNode" select="/node()/pro:simple_instance[pro:name=$inp]"></xsl:variable>
<xsl:variable name="uniqueNode" select="$NewNode/pro:name except ($BeatenPath)"></xsl:variable>
<xsl:if test="count($uniqueNode) > 0">
<xsl:call-template name="Recurse2Find">
<xsl:with-param name="AppNode" select="$AppNode"></xsl:with-param>
<xsl:with-param name="elNode" select="$NewNode"></xsl:with-param>
<xsl:with-param name="thisProduct" select="$thisProduct"></xsl:with-param>
<xsl:with-param name="BeatenPath" select="$BeatenPath|$NewNode/pro:name"></xsl:with-param>
<xsl:with-param name="rev" select="$rev+1"></xsl:with-param>
<xsl:with-param name="Found" select="0"></xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:for-each>
我基本上是在图表中搜索某些东西,并且在每次递归中沿着图表的一个级别向下走,同时在 for-each 循环的每次迭代中遵循图表的不同分支。
如果我在任何一条腿中找到我正在搜索的项目,我希望停止进一步搜索该根。
我可以从调用模板返回一个值,但不知道如何实现它并将其进一步作为参数。否则会播放模板中的参数Found。如果我可以从较早的递归中更新参数的值,它将对我有所帮助。但是我该怎么做呢?
编辑:
我在这里添加一些构建源 XML 的 XML 元素:
<simple_instance>
<name>KB_249702_Class31</name>
<type>Technology_Build_Architecture</type>
<own_slot_value>
<slot_reference>contained_architecture_components</slot_reference>
<value value_type="simple_instance">KB_249702_Class32</value>
<value value_type="simple_instance">KB_181699_Class96</value>
<value value_type="simple_instance">KB_181699_Class97</value>
<value value_type="simple_instance">KB_692833_Class51</value>
<value value_type="simple_instance">KB_692833_Class52</value>
</own_slot_value>
<own_slot_value>
<slot_reference>contained_provider_architecture_relations</slot_reference>
<value value_type="simple_instance">KB_181699_Class98</value>
<value value_type="simple_instance">KB_692833_Class54</value>
<value value_type="simple_instance">KB_692833_Class55</value>
</own_slot_value>
<own_slot_value>
<slot_reference>describes_technology_provider</slot_reference>
<value value_type="simple_instance">KB_249702_Class30</value>
</own_slot_value>
<own_slot_value>
<slot_reference>name</slot_reference>
<value value_type="string">HHS Modernization Arch::Product_Architecture</value>
</own_slot_value>
</simple_instance>
我正在寻找像KB_249702_Class30 这样的密钥,我从某个根目录开始。根是带有<type>Application_Provider</type> 的元素,查看所有<own_slot_value>,我得到<value value_type="simple_instance"> 并获取值。如果我没有找到,我会带着值去<name>..</name> 的元素。我以这种方式继续搜索。
【问题讨论】:
-
请提供一个完整的(但很小的)源 XML、想要的结果,并解释转换应该做什么。这就是定义问题的原因。考虑到所有这些必要的信息,我很乐意提供解决方案。
-
另外,什么是“腿”?我还没有在图论中看到过这样的术语。你是说路径吗?图是有向图还是无向图?请提供图形(小)xml 表示的实例。
-
@DimitreNovaatchev:基本上在任何情况下,每个节点都有多个关系导致不同的节点。我将每个从节点到连接节点的路径描述为“腿”。
-
@Kanghan:这仍然是个谜。你的意思是“腿”只是一个“弧线”吗?
-
@Kanghan:这个问题太笼统了,没有图形表示的具体示例/实例,也没有提供想要的结果。我一般不会花时间在这样的“问题”上。缺乏细节通常意味着提问者不知道他们在问什么……如果您希望人们提供有用的、可行的解决方案,请改进这个问题。