XPATH-Frage (Problem)

Wanze003

Grünschnabel
Hallo zusammen,

möchte aus folgender XML-Struktur Werte heraus lesen über XPATH. Das ganze funktioniert nur teilweise. Probleme machen die OR bzw. AND Operationen :confused:

Code:
<Object>
	<ComponentList>
	  <Component Name="_Article">
	     <ClassName>MeineKlasse</ClassName>
	     <Quantity>1.000000</Quantity>
	     <OrderNumber>-1</OrderNumber>
	     <ObjectNumber>2</ObjectNumber>
	  </Component>
	<Component Name="_Article1">
	     <ClassName>TestKlasse1</ClassName>
 	     <Quantity>1.000000</Quantity>
	     <OrderNumber>-1</OrderNumber>
	     <ObjectNumber>3</ObjectNumber>
	 </Component>
	<Component Name="_Article2">
	     <ClassName>Testklasse2</ClassName>
	     <Quantity>1.000000</Quantity>
	     <OrderNumber>6</OrderNumber>
	     <ObjectNumber>3</ObjectNumber>
	 </Component>
	<Component Name="_Article3">
	     <ClassName>NeueKlasse</ClassName>
	     <Quantity>1.000000</Quantity>
	     <OrderNumber>6</OrderNumber>
	     <ObjectNumber>3</ObjectNumber>
                 </Component>
	<Component Name="_Article4">
	     <ClassName>NeueKlasse</ClassName>
	     <Quantity>1.000000</Quantity>
	     <OrderNumber>6</OrderNumber>
	     <ObjectNumber>3</ObjectNumber>
                     <AssigndDeleteRule>1</AssigndDeleteRule>
	</Component>
	</ComponentList>
<Object>

-->
In meinem Ergebnis möchte ich nur die Componenten, welche Ordernuber != -1 und die jeningen welche kein Kind Namens AssignDeleteRule haben.


Mein XPATH sieht momentan so aus:
(Nur eine von vielen Möglichkeiten die ich getesten habe.

Code:
//child::*[self::Classname and self::ObjectNumber and self::OrderNumber != -1 and self::AssigndeleteRule != null]/child::text()
Vielleicht ist das auch der komplett falsche Ansatz :confused:

Die Liste die ich über XPATH raus lesen möchte sollte nachher so aussehen:

Ergebnis:
ClassName TestKlasse2
Quantity 1.000000
OrderNumber 6
ObjectNumber 3
ClassName NeueKlasse
Quantity 1.000000
OrderNumber 6
ObjectNumber 3

Für eine Hilfe wäre ich euch dankbar!

Wanze003
 
Da ich nicht deine XSLT Datei kenne mein Vorschlag

Code:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="text" indent="yes"/>
	<xsl:variable name="lf">
		<xsl:text>
</xsl:text>
	</xsl:variable>

	<xsl:template match="/">
		<xsl:apply-templates select="Object"/>
	</xsl:template>
	<xsl:template match="Object">
		<xsl:apply-templates select="ComponentList"/>
	</xsl:template>
	<xsl:template match="ComponentList">
		<xsl:apply-templates select="Component[./OrderNumber!= -1 and not(AssigndDeleteRule)]"/>
	</xsl:template>
	<xsl:template match="Component">

		<xsl:text>ClassName  </xsl:text>
		<xsl:value-of select="ClassName"/>
		<xsl:value-of select="$lf"/>
		<xsl:text>Quantity  </xsl:text>
		<xsl:value-of select="Quantity"/>
		<xsl:value-of select="$lf"/>
		<xsl:text>OrderNumber  </xsl:text>
		<xsl:value-of select="OrderNumber"/>
		<xsl:value-of select="$lf"/>
		<xsl:text>ObjectNumber  </xsl:text>
		<xsl:value-of select="ObjectNumber"/>
		<xsl:value-of select="$lf"/>
	</xsl:template>
</xsl:stylesheet>
 
Danke mal für Deine schnelle Hilfe!
jedoch nutze ich XSL gar nicht. Ich übergebe den XPATH einer Funktion die dann die ausgewählten Nodes zurück gibt, welche ich im XPATH definiere. Von daher ist mir die XPATH-Syntax an der Stelle wichtig. Ich habe jetzt gerade getestet das aus Deiner XSL als XPATH zu verwenden, will aber irgendwie nicht en.

Hab jetzt folgendes als XPATH zusammen gebaut:

Code:
/Object/ComponentList/Component[./OrderNumber!= -1 and not(AssigndDeleteRule)]/child::text()

kriege so leider gar nichts zurück.:confused:
Irgendwo ist hier der Wurm drin:suspekt:

Gruß
Wanze003
 
Hi.
Hab jetzt folgendes als XPATH zusammen gebaut:

Code:
/Object/ComponentList/Component[./OrderNumber!= -1 and not(AssigndDeleteRule)]/child::text()

kriege so leider gar nichts zurück.:confused:
Du darfst dort nicht child::text() anhängen. Du bekommst durch den Ausdruck
Code:
/Object/ComponentList/Component[./OrderNumber!= -1 and not(AssigndDeleteRule)]
schon das richtige Ergebnis, du mußt jetzt nur durch das Node-Set durchgehen und die gewünschten Informationen ausgeben.

Gruß
 

Neue Beiträge

Zurück