我的计数好了,但是当我进一步过滤到CODE ='A'或'B'时,我得到'C'以及NODE GUID =“2”。
看起来相当直接,但我不确定我做错了什么。
非常感谢任何帮助。提前谢谢。
有关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>
答案 0 :(得分:0)
如果您只想计算ActivityCode
和CodeTypeName = 'CODE'
以及CodeValue = 'A'
所有+1
块的数量,请使用以下计数:
count(//ActivityCode[CodeTypeName = 'CODE' and CodeValue = 'A']) + 1
结果:
3
但是,如果您想要计算ActivityCode
中CodeTypeName = 'CODE'
和CodeValue = 'A'
NODE
阻止GUID = '2'
和+1
中count(/NODEs/NODE[@GUID = '2']/NODEs/NODE[@GUID = '2']//ActivityCode[CodeTypeName = 'CODE' and CodeValue = 'A']) + 1
的所有2
块的数量如上所述)使用如下:
done
结果:
provider.addInteraction(interaction1)
.then(() => provider.addInteraction(interaction2));
.then(() => done());
答案 1 :(得分:0)
您的XPath似乎有问题:
count(preceding-sibling::*[ActivityCodes/ActivityCode[CodeTypeName = 'CODE']/CodeValue = 'A'] or [ActivityCodes/ActivityCode[CodeTypeName = 'CODE']/CodeValue = 'B'] ) +1
看起来你的意思是or
条件在谓词中而不是在两个谓词之间:
count(preceding-sibling::*[ActivityCodes/ActivityCode[CodeTypeName = 'CODE']/CodeValue = 'A' or ActivityCodes/ActivityCode[CodeTypeName = 'CODE']/CodeValue = 'B'] ) +1
这将计算具有后代ActivityCodes/ActivityCode/CodeValue
的上下文节点的所有前面的兄弟节点,其中ActivityCode
具有值CodeTypeName
的{{1}}子节点和{{1}有值'CODE'
。不过,你应该能够更紧凑地表达同样的事情:
CodeValue
就个人而言,我发现更紧凑的版本也更清晰。