Parameter und Nodes
Wenn Parameter in XPath-Funktionen, die Nodes auffinden, verwendet werden, ist es wichtig zu beachten, dass die Funktion keinen Kontext-Node hat, ganz gleich von wo im Design sie aufgerufen wird. Der Kontext-Node kann entweder durch den XPath-Ausdruck, der zur Definition der Funktion verwendet wird, (das heißt im Bereich "Funktionsrumpf") oder durch den XPath-Ausdruck, der zum Aufrufen der XPath-Funktion verwendet wird, übergeben werden. Im letzteren Fall kann der Kontext über Argumente im Funktionsaufruf übergeben werden.
Betrachten Sie die benutzerdefinierte XPath-Funktion Stock(), die, wie in der Abbildung unten zu sehen ist, mit drei Parametern definiert ist.
Die Definition im Funktionsrumpf ist $ContextStock[@name=$Selection]/$StockInfo. Diese verwendet die drei Parameter, enthält jedoch keine Information zum Kontext-Node. Die Information zum Kontext-Node kann vom XPath-Ausdruck bezogen werden, der die Funktion aufruft, beispielsweise auf diese Art:
sps:Stock( $XML/Trades/Stock, $XML/Trades/Selection/Stock, @name )
Der Funktionsaufruf hat drei Argumente, von denen jedes entweder Informationen zum Kontext-Node oder Information zur Node-Lokalisierung bietet. Alternativ dazu kann der folgende XPath-Ausdruck als Funktionsaufruf verwendet werden. Er liefert dieselben Ergebnisse:
sps:Stock( /Trades/Stock, /Trades/Selection/Stock, @name )
sps:Stock( /Trades/Stock, //Selection/Stock, @name )
Die Variable $XML, die die Dokument-Root zurückgibt, kann in Funktionsaufrufen von Design-Komponenten ausgelassen werden, weil im XPath-Ausdruck von Design-Komponenten der Kontext-Node bekannt ist.
Beachten Sie, dass es im obigen Funktionsaufruf drei Eingabeargumente gibt, die jeweils den drei für die benutzerdefinierte XPath-Funktion definierten Parametern entsprechen:
• $ContextStock = $XML/Trades/Stock (das Element /Trades/Stock)
• $Selection = $XML/Trades/Selection/Stock (das Element /Trades/Selection/Stock)
• $StockInfo = @name
Der XPath-Ausdruck in der Funktionsdefinition lautet:
$ContextStock[@name=$Selection]/$StockInfo
Wenn die Eingabeargumente ersetzt werden, wird aus dem XPath-Ausdruck in der Funktionsdefinition:
$XML/Trades/Stock[@name=$XML/Trades/Selection/Stock]/@name
Es wichtig zu beachten, dass die Nodesets an die Funktion übergeben werden und nicht die Text-Strings.
Der Kontext-Node und die Schritte zur Auffindung des Node werden auf diese Weise über Parameter an die Funktion übergeben. Anschließend kann die Funktion ausgewertet werden, um die erforderlichen Nodes zu finden und zurückzugeben.