【发布时间】:2017-12-20 22:37:24
【问题描述】:
我的计数正常,但是当我进一步过滤到 CODE='A' 或'B' 时,对于 NODE GUID=“2”,我也得到了“C”。
它看起来相当简单,但我不确定我做错了什么。
任何帮助将不胜感激。提前致谢。
有关 XPATH 表达式,请参阅 XSLT。
这是我的 XML:
<?xml version="1.0" encoding="UTF-8"?>
<NODEs>
<NODE GUID="2">
<Name>Michael</Name>
<Activities/>
<NODEs>
<NODE GUID="1">
<Name>Larry</Name>
<ParentNODE>2</ParentNODE>
<Activities>
<Activity GUID="A1">
<ActivityCodes>
<ActivityCode>
<CodeTypeName>CODE</CodeTypeName>
<CodeValue>A</CodeValue>
</ActivityCode>
</ActivityCodes>
</Activity>
</Activities>
</NODE>
<NODE GUID="2">
<Name>Joe</Name>
<ParentNODE>2</ParentNODE>
<Activities>
<Activity GUID="A2">
<NODECode>2</NODECode>
<ActivityCodes>
<ActivityCode>
<CodeTypeName>CODE</CodeTypeName>
<CodeValue>A</CodeValue>
</ActivityCode>
</ActivityCodes>
</Activity>
<Activity GUID="A3">
<NODECode>2</NODECode>
<ActivityCodes>
<ActivityCode>
<CodeTypeName>CODE</CodeTypeName>
<CodeValue>C</CodeValue>
</ActivityCode>
</ActivityCodes>
</Activity>
<Activity GUID="A4">
<NODECode>2</NODECode>
<ActivityCodes>
<ActivityCode>
<CodeTypeName>CODE</CodeTypeName>
<CodeValue>B</CodeValue>
</ActivityCode>
</ActivityCodes>
</Activity>
</Activities>
</NODE>
</NODEs>
</NODE>
</NODEs>
这是相关的 XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0"
xmlns:saxon="http://saxon.sf.net/"
xmlns:PS="http://localhost"
exclude-result-prefixes="saxon PS">
<xsl:apply-templates select=".//Activity" mode="I_NODE">
</xsl:apply-templates>
<xsl:template match="Activity" mode="I_NODE">
<xsl:variable name="Code" select="ActivityCodes/ActivityCode[CodeTypeName = 'CODE']/CodeValue"/> <!-- 'A'/'B' -->
<xsl:if test="$Code = 'A' or $Code = 'B'">
<NODE>
<xsl:variable name="Count" select="count(preceding-sibling::*[$Code = 'A' or $Code = 'B'] ) +1"/>
<xsl:value-of select="$Count"/>
</NODE>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
当前输出:
<NODE>1</NODE>
<NODE>1</NODE>
<NODE>3</NODE>
预期输出:
<NODE>1</NODE>
<NODE>1</NODE>
<NODE>2</NODE>
【问题讨论】:
-
您使用的 XPath 来自什么上下文?仅使用 XPath 进行调试有点困难。此外,该 XPath 无效。 stackoverflow.com/help/mcve
-
它来自 xslt:
-
所讨论的 XPath 表达式在您编辑的 XSLT 中的形式与您最初询问的独立 XPath 表达式的形式有些不同。新表达式还使用了一个变量
$SAPInternalCode,它没有在任何地方定义。也许你的意思是$Code那里,但如果是这样,那么我不认为这个表达意味着你认为它的意思。特别是,它与您最初发布的表达方式不同。 -
是的,我的意思是 $Code。我尝试了谓词的许多变体并发布了不正确的谓词。然而,应该有一个有效的谓词。 If 语句仅处理输出中可以证明的 A 和 B 代码。 1 个输出给拉里,2 个输出给乔。问题在于计数谓词,Larry 的计数应该是 2,但无论我尝试什么,它都会出现 3。必须有一个合乎逻辑的解释。