2017-07-19 24 views
0

Ich versuche, meine XPath funcionalities zu strukturieren, auf diese Weise ich eine XML-Datei mit einer Liste von Knoten enthält XPath Strings erstellt haben, so etwas wie dieses:Inject Xpath von XPath-Funktion

<?xml version="1.0" encoding="UTF-8"?> 
<main> 
    <entry id="A">/A/B/@value</entry> 
</main> 

Diese XML-Datei kann von Xpath-Variable geladen werden, z. B. GLOBAL. Also, wenn ich diesen xpath benutzen möchte, sollte auf meinem spezifischen xpath Code mit $GLOBAL/main/entry[@id='A'] genug sein, um dieses xpath snippet zu benutzen. Mein Code gibt stattdessen die einfache X-Pfad-Zeichenfolge "/ A/B/@ value" aus, um sie zum Abrufen des endgültigen Werts zu verwenden.

Vielleicht ist mein Fokus auf dieses Thema falsch, wie soll ich das tun? Meine Absicht ist, häufig verwendete xpath-Ausdrücke zu trennen und sie für andere xpath-Codes zu verwenden.

+0

Es gibt keine 'eval'-Funktion oder ähnliches in irgendeiner XPath-Version, die ich kenne. XSLT 3.0 hat https://www.w3.org/TR/xslt-30/#element-evaluate, um innerhalb von XSLT das zu tun, was Sie wollen. Aber in reinem XPath müssten Sie überprüfen, ob Ihre XPath-API eine Erweiterungsfunktion oder eine Möglichkeit zur Implementierung bietet. –

+0

Siehe http://saxonica.com/html/documentation9.7/functivities/saxon/evaluate-node.html für einen sächsischen spezifischen Weg, z. 'saxon: evaluate-node ($ GLOBAL/main/entry [@ id = 'A'])' sollte tun, was Sie wollen, wenn Sie die kommerziellen Versionen von Saxon 9 und XPath verwenden. –

Antwort

0

Ich habe versucht mit evaluate-node aber nicht ausgeführt, danach haben wir versucht mit evaluate-Funktion und es lief sehr gut.

saxon:evaluate($GLOBAL/main/entry[@id='A']) 

Vielen Dank für Ihre Antworten !!