2010-09-21 9 views
5

Ich möchte den Wert eines Elements finden, das auf ID-Attribut übereinstimmt, für das ich nur das ref habe - das Bit mit #, dem Anker.Xpath: finde einen Elementwert aus einer Übereinstimmung von ID-Attribut mit ID-Anker

ich für den Wert von PartyID suchen:

< party id="partyA" > 
    <partyId>THEID</partyId> 

aber um dorthin zu gelangen Ich habe nur die href aus der folgenden

<MyData> 
    < MyReference href="#partyA" /> 

abisolieren # Zeichen nicht gut zu mir sehen.

Irgendwelche Hinweise?

+1

Gute Frage (+1). Siehe meine Antwort für zwei mögliche Lösungen :) –

Antwort

4

Da Sie keine vollständigen XML-Dokumente zur Verfügung gestellt haben, muss ich // verwenden - eine Praxis, die ich dringend zu vermeiden.

Angenommen,

$vDataRef

definiert als

//MyData/MyReference/@href

und dessen Zeichenfolgenwert ist "#partyA", dann eine mögliche XPath-Ausdruck, der gewünschte Knoten auswählt:

//party[@id=substring($vDataRef,2)] 

Falls das XML-Dokument eine DTD hat, in dem das id Attribut party definiert ist vom Typ sein ID, dann ist es bequemer und effizienter, die Standard-XPath-Funktion zu verwenden id():

id(substring($vDataRef,2)) 
0

Vorausgesetzt, dass Sie Ihre ID als Variable haben bereits (lets $ myid sagen), dann versuchen Sie es mit:

//party[contains($myId, @id)] 

Die contains() function sehen auf jedem passenden Knoten, um zu sehen, ob die PartyID attibut in Teh Wert ist, den Sie in geben

Alternativ (wie 'ropey angesehen werden kann), können Sie versuchen.

//party[@id=substring($myId, 2, 1 div 0)] 

die substring() function sollte ein wenig genauer sein.

+0

Es ist OK, p/2 'fn: substring()' zu verwenden, Sie brauchen diesen 'INF' Ausdruck nicht. –

Verwandte Themen