2016-04-26 2 views
0

wenn ich die folgende Anforderung verwendenXquery Wie kann ich die XML-Datei mit allen Knoten durch Filterung in mehr als einem Element erhalten?

collection('vagelisdb')[SensorInfo/Position/x>4] 

kann ich all die nodesof xml erhalten, die meine Erwartungen von x> 4

fullfill, aber es funktioniert nicht, dass ich in einem mehr Knoten filtern wollen, das ist tiefer

collection('vagelisdb')[SensorInfo/Position/x>4/anothernodename/y<2] 

ich nur die Knoten empfangen möchten, dass x> 4 und y < 2 Erwartungen erfüllen, aber ich will die ganze xml. Dies bedeutet auch, die Knoten, die von SENSOR

Um zu geben, einige weitere Details der xml wie dieser ist beginnen

<SensorInfo> 
    <Position> 
     <x>2</x> 
     <anothernodename> 
      <y>3</y> 
     </anothernodename> 
    </Position> 
    <Position> 
     <x>5</x> 
     <anothernodename> 
      <y>1</y> 
     </anothernodename> 
    </Position> 
</SensorInfo> 

Und ich will

<SensorInfo> 
    <Position> 
     <x>5</x> 
     <anothernodename> 
      <y>1</y> 
     </anothernodename> 
    </Position> 
</SensorInfo> 

Antwort

1

Nur and verwenden erhalten:

collection('vagelisdb')[SensorInfo/Position/x>4 and SensorInfo/Position/anothernodename/y<2] 
+0

Dies scheint nicht funktionieren können. Es gibt alle Daten zurück, ohne zu berücksichtigen, wenn y <2 ist. Ich möchte nur die SensorInfo erhalten, die x> 4 und y <2 hat. – vagelis

+0

@vagelis Sie haben anfangs nicht genügend Informationen bereitgestellt, um zu wissen, welches XPath verwendet werden soll. Meine Antwort wurde aktualisiert, um die Aktualisierungen Ihrer Frage widerzuspiegeln. – wst

0

Um die gewünschten Position Knoten auszuwählen: collection('vagelisdb')/SensorInfo/Position[x>4 and anothernodename/y<2]

Um diese Ergebnisse in einem SensorInfo Element wickeln Sie element SensorInfo { collection('vagelisdb')/SensorInfo/Position[ x>4 and anothernodename/y<2] }

+0

Das Problem ist, dass ich Namespaces Deklarationen im SensorInfo Element habe und dann bekomme ich die Namespace Deklarationen in Position Element – vagelis

+0

Das kann irritierend sein, aber diese ungenutzten Namespace Deklarationen werden keinen Schaden anrichten. Wenn Sie sie aus irgendeinem Grund entfernen müssen, können Sie eine Funktion wie 'strip-ns' verwenden, siehe [xquery-how-to-remove-unused-namespace-in-xml-node] (http://stackoverflow.com/questions/ 23002655/xquery-how-to-remove-unused-namespace-in-xml-node) –

Verwandte Themen