Mit folgendem XML:
<node>Text1<subnode/>text2</node>
Wie wähle ich über XPath entweder den ersten oder den zweiten Textknoten aus?
Etwas wie das:
/node/text()[2]
funktioniert natürlich nicht, weil es das zusammengeführte Ergebnis jedes Textes innerhalb des Knotens ist.
/node/text()[2]
[...] funktioniert nicht, weil es das zusammengeführte Ergebnis jedes Textes innerhalb des Knotens ist. Das ist falsch: Es bedeutet, dass das zweite untergeordnete Textknoten desnode
Stammelements . Der Zeichenfolgenwert (Verkettung vonstring(/node)
Antworten:
Verwendung :
Dadurch werden alle untergeordneten Textknoten des obersten Elements (mit dem Namen "Knoten") des XML-Dokuments ausgewählt.
Dadurch wird das erste untergeordnete Textknoten des obersten Elements (mit dem Namen "Knoten") des XML-Dokuments ausgewählt.
Dadurch wird das zweite untergeordnete Textknoten des obersten Elements (mit dem Namen "Knoten") des XML-Dokuments ausgewählt.
Dadurch wird das untergeordnete Textknoten-Kind des obersten Elements (mit dem Namen "Knoten") des XML-Dokuments ausgewählt. Es entspricht dem folgenden XPath-Ausdruck:
quelle
/node[2]
darf keinen Knoten auswählen, wenn das XML-Quelldokument wohlgeformt ist. Per Definition gibt es in einem wohlgeformten XML-Dokument nur ein (einzelnes) oberstes Element - auch bekannt alsdocument-element
//*[text()]
benutzen./html/text()
funktioniert nicht./html/text()
nicht alle Textknoten im Dokument ausgewählt werden - nur die Textknoten, die untergeordnetehtml
Elemente (keine Nachkommen) des obersten Elements sind. Sie wollen wahrscheinlich/html//text()
. Einige Kenntnisse und Kenntnisse in XPath sind normalerweise erforderlich, um XPath-Ausdrücke zu erstellen.Ihr xpath sollte funktionieren. Ich habe Ihren und meinen xpath sowohl in der MarkLogic- als auch in der Zorba Xquery / Xpath-Implementierung getestet.
Beides sollte funktionieren.
quelle