由于for-each,我正在尝试通过一组节点,并且当这个节点中的参数验证很少的条件时,我想在变量中选择当前节点。 问题是它似乎选择了节点中的值,而不是实际节点本身。我希望以后能够将此变量用作节点集。
XML($ parameterFile):
<?xml version="1.0" encoding="UTF-8"?>
<Cases>
<Case>
<Rule LineNumber="10" PartNumber="FT40X40"/>
<Template>
<Drawings>
test
</Drawings>
</Template>
</Case>
<Case>
<Rule LineNumber="10" PartNumber="FT40X46k"/>
<Template>
<Drawings>
test2
</Drawings>
</Template>
</Case>
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="xs"
version="2.0">
<xsl:variable name="GoodCase">
<xsl:for-each select="$parameterFile/Cases/Case">
<xsl:choose>
<xsl:when test="(Rule/@LineNumber = $markerNbLines) and
(Rule/@PartNumber = $markerPartNumber)">
<xsl:value-of select="current()"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:variable>
<xsl:for-each select="$parameterFile/$GoodCase/Template/Drawings">
test
</xsl:for-each>
预期输出:
test
谢谢!
答案 0 :(得分:0)
pb [问题?]是它似乎选择了节点中的值,而不是 实际节点本身。
嗯,你 使用:
<xsl:value-of select="current()"/>
所以这是唯一的预期。您可以使用<xsl:copy-of>
来编写整个节点。但是,生成的变量将包含结果树片段,而不是节点集,因此如果:
我希望以后可以将此变量用作节点集。
以这种方式填充变量会更好(未经测试,因为部分代码无法进行测试):
<xsl:variable name="GoodCase" select="$parameterFile/Cases/Case[Rule/@LineNumber=$markerNbLines and Rule/@PartNumber=$markerPartNumber]"/>
它只存储对原始节点的引用,因此它本身就是一个节点集。