Meine Zählung ist in Ordnung, aber wenn ich weiter nach CODE = 'A' oder 'B' filtere, bekomme ich auch 'C' für NODE GUID = "2".XSLT-Filter funktioniert nicht
Es sieht ziemlich geradlinig aus, aber ich bin mir nicht sicher, was ich falsch mache.
Jede Hilfe würde sehr geschätzt werden. Danke im Voraus.
Siehe XSLT für den XPATH-Ausdruck.
Das ist mein 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>
Dies ist relevant 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>
Stromausgang:
<NODE>1</NODE>
<NODE>1</NODE>
<NODE>3</NODE>
Erwartete Ausgabe:
<NODE>1</NODE>
<NODE>1</NODE>
<NODE>2</NODE>
In welchem Kontext verwenden Sie diesen XPath? Es ist ein wenig schwierig, nur mit dem XPath zu debuggen. Außerdem ist dieser XPath ungültig. https: // Stapelüberlauf.com/help/mcve –
Es ist von xslt: –
Jkoul
Der betreffende XPath-Ausdruck hat eine etwas andere Form in der von Ihnen bearbeiteten XSLT als der eigenständige XPath-Ausdruck, über den Sie ursprünglich verfügen fragte. Der neue Ausdruck verwendet außerdem eine Variable $ SAPInternalCode, die nirgendwo definiert ist. Vielleicht meinst du dort "Code", aber wenn, dann denke ich nicht, dass der Ausdruck das bedeutet, was du denkst, dass es bedeutet. Insbesondere ist es dann nicht analog zu dem Ausdruck, den Sie ursprünglich gepostet haben. –