XSLT XPath compare Problem

vaporizer

Erfahrenes Mitglied
Hallo

Folgendes Problem würde ich gerne per XPath lösen:
Es gibt folgende Struktur:
Code:
<fullset>
	<vorher>
		<person>
			<name>
				person1
			</name>
			<item name="values">
				<values>123</values>
				<values>234</values>
			</item>
		</person>
		<person>
			<name>
				person2
			</name>
			<item name="values">
				<values>999</values>
			</item>
		</person>
	</vorher>
	<nacher>
		<person>
			<name>
				person1
			</name>
			<item name="values">
				<values>123</values>
				<values>456</values>
			</item>
		</person>
		<person>
			<name>
				person2
			</name>
			<item name="values">
				<values>999</values>
			</item>
		</person>
	</nacher>
</fullset>
Würde nun gerne einen XPath haben der mir alle personen liefert,
bei denen sich die values geändert haben.
Im obigen Fall wäre das dann person1.
Value Nodes können sich ändern, hinzugefügt werden oder sich veringern.

Könnte mir bitte jemand behilflich sein einen XPath zusammenzustelln,
der mir das gewünschte Ergebniss liefert.

lg
Markus
 
Zuletzt bearbeitet:
Also ich hab hier mal nen ersten ansatz:
Hier nochmal die Struktur:
Code:
<fullset>
  <vorher>
    <object name = "person">
      <item name="name">
        <values>person1</values>
      </item>
      <item name="values">
        <values>234</values>
      </item>
    </object>
    <object name = "person">
      <item name="name">
        <values>person2</values>
      </item>
      <item name="values">
        <values>999</values>
      </item>
    </object>
    <object name = "person">
      <item name="name">
        <values>person4</values>
      </item>
      <item name="values">
        <values>666</values>
        <values>777</values>
      </item>
    </object>
  </vorher>
  <nacher>
    <object name = "person">
      <item name="name">
        <values>person1</values>
      </item>
      <item name="values">
        <values>456</values>
      </item>
    </object>
    <object name = "person">
      <item name="name">
        <values>person2</values>
      </item>
      <item name="values">
        <values>999</values>
      </item>
    </object>
    <object name = "person">
      <item name="name">
        <values>person3</values>
      </item>
      <item name="values">
        <values>231</values>
      </item>
    </object>
    <object name = "person">
      <item name="name">
        <values>person4</values>
      </item>
      <item name="values">
        <values>666</values>
        <values>888</values>
      </item>
    </object>
  </nacher>
</fullset>

Hier der XPath dazu:
Code:
/fullset/nacher/object[@name = 'person' and (item[@name = 'name']/values = /fullset/vorher/object[@name = 'person']/item[@name = 'name']/values)
and not (item[@name = 'values']/values = /fullset/vorher/object[@name = 'person']/item[@name = 'values']/values)]/item/values

Dieser XPath liefert mir korrekterweise die Person 1 zurück da der value unterschiedlich ist.
Person 4 jedoch wo sich ein value von den zwei verändert hat, diesen bekomme
ich leider NICHT zurückgeliefert.

Kann mir bitte jemand weiterhelfen?
Wie kann ich einen Vergleich machen wenn mehrere Nodes vorhanden sind?
lg Markus
 
Hi.

Das kannst du allein mit einem XPath Ausdruck nicht erreichen, da du erstmal die zueinander passenden Knoten selektieren müßtest, die du dann vergleichen willst. Das geht allerdings nicht, da du in einem Filterausdruck nicht auf den Kontextknoten eines anderen Filterausdruck Bezug nehmen kannst.

Gruß
 
Zurück