Altova StyleVision 2024 Enterprise Edition

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.

 

XPFxParams

 

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.

 

© 2017-2023 Altova GmbH