Ich probiere gerade den folgenden xpath
aus %Vor% um alle tr zu erhalten, die eine td enthalten, die 'User Name'
oder 'User Name'
oder ' User Name '
enthält, aber es funktioniert nicht und ich weiß nicht, was mit der Abfrage falsch ist :(
Die Daten, die ich finden möchte, haben folgendes Format:
Was ist das richtige Format zum Schreiben dieser XPath-Abfrage?
Bearbeiten: Es scheint nicht zu funktionieren, wenn die Daten das folgende Format haben:
%Vor% so wie kann ich nun die xpath-abfrage schreiben?
Hinweis: "// tr [normalize-space (td / text ()) = 'Benutzername']" wird nicht funktionieren
aber "// tr / td [normalize-space (text ()) = 'Benutzername']" wird funktionieren (aber ich möchte das tr- und nicht das td-Element erhalten)
Nachdem Sie die Frage bearbeitet haben, ist es sinnvoll. Betrachten wir diese Eingabe:
%Vor%und Ihre nicht funktionierende Abfrage:
%Vor% Nun bedeutet td/text()
"wählt alle untergeordneten Textknoten aller untergeordneten td
Knoten des aktuellen Knotens aus". In diesem Fall ergibt sich ein Knotensatz bestehend aus zwei Textknoten, x
und User Name
.
Jetzt rufen Sie normalize-space()
für diesen Knotensatz auf. Der Typ des einzigen Arguments von normalize-space()
ist string?
. Da ein Node-Set keine Zeichenfolge ist, treten Conversions gemäß Abschnitt 3.2 von XPath 1.0 ein Empfehlung:
Ein Argument wird wie durch Aufrufen der Funktion string () in den Typ string konvertiert.
Sehen wir uns nun die Definition von string () in Abschnitt 4.2 an:
Ein Knotensatz wird in eine Zeichenfolge konvertiert, indem der Zeichenfolgenwert des Knotens in der Knotengruppe zurückgegeben wird, die sich zuerst in der Dokumentreihenfolge befindet . Wenn der Knotensatz leer ist, wird eine leere Zeichenfolge zurückgegeben.
In unserem Beispiel ist der erste Knoten "in Dokumentenreihenfolge" der Textknoten x
, also der, der verwendet wird; der zweite Knoten wird ignoriert. Sie rufen also normalize-space('x')
auf. Natürlich wird dies nicht mit "Benutzername" verglichen. Verwenden Sie dazu:
Dies kann wie folgt überschrieben werden: "select all tr
nodes, die untergeordnete td
Knoten haben, wobei der erste untergeordnete Knoten text()
einen normalisierten Zeichenfolgenwert von User Name
hat" - was Sie wollen. Darüber hinaus können Sie dies vereinfachen:
Da für den aktuellen Knoten ein No-Argument normalize-space()
gilt (das ist td
), und alle Textknoten darin verarbeiten.
Das funktioniert hier gut:
%Vor%Können Sie Ihre Frage bitte mit einem aktuellen XML-Beispiel aktualisieren?