2016-11-06 5 views
0

Ich brauche einen Xpath-Ausdruck, der ein XML-Dokument basierend auf einer Bedingung teilt, wobei ich ein Dokument für jedes eindeutige Dokument erhalte (wie im Beispiel unten).Xpath-Ausdruck für Knotenwert

Die XML-Beispiel unten sollte in 2 Dokumenten (ID 100 und 200) führen. Ich möchte Werte nicht fest codieren ...

Irgendwelche Ideen, wie ich das mit xpath Ausdruck machen kann?

(ich weiß, ich kann 4 Dokumente mit Ausdruck/data/Mitarbeiter)

Beispiel:

<data> 
    <employee> 
     <id>100</id> 
     <tag>A</tag> 
    </employee> 
    <employee> 
     <id>100</id> 
     <tag>B</tag> 
    </employee> 
    <employee> 
     <id>200</id> 
     <tag>A</tag> 
    </employee> 
    <employee> 
     <id>200</id> 
     <tag>B</tag> 
    </employee> 
</data> 

Ausgabe:

Dokument # 1

<data> 
    <employee> 
     <id>100</id> 
     <tag>A</tag> 
    </employee> 
    <employee> 
     <id>100</id> 
     <tag>B</tag> 
    </employee> 
</data> 

Dokument # 2

<data> 
    <employee> 
     <id>200</id> 
     <tag>A</tag> 
    </employee> 
    <employee> 
     <id>200</id> 
     <tag>B</tag> 
    </employee> 
</data> 
+0

XPath ist eine Abfragesprache, ist es nicht geteilt/Transformation/Dokumente erstellen. Suchst du nach XSLT? – Lucero

Antwort

0

XPath ist eine Abfragesprache, kein Dokument Transformation. Daher kann die Aufgabe nicht nur mit XPath ausgeführt werden. Ihre Frage sagt auch nichts über die Umgebung aus, in der sie läuft, daher ist es nicht möglich, eine gründliche Antwort zu geben.

Davon abgesehen, könnte dieser Ansatz sein, was Sie brauchen:

  • Abfrage für /data/employee/id und die Knotenwerte auf einen Satz hinzufügen (zum Beispiel eine Tüte mit verschiedenen Werten).
  • Schleife über die verschiedenen Werte, und erstellen Sie eine Abfrage wie folgt, um die passenden Knoten für jeden Mitarbeiter zu erhalten: /data/employee[id=ID] (wo Sie ID mit dem eindeutigen Wert ersetzen, die Sie gerade durchlaufen).
  • Sie könnten diese Ergebnisse verwenden, um Ihre abgeleiteten Dokumente zu erstellen, aber wie dies geschieht, hängt von der Umgebung ab.
2

In XSLT 2.0 ist dies ein Standard-Gruppierung Anwendungsfall:

<xsl:for-each-group select="employee" group-by="id"> 
    <xsl:result-document href="{position()}.xml"> 
    <data> 
     <xsl:copy-of select="current-group()"/> 
    </data> 
    </xsl:result-document> 
</xsl:for-each-group> 
Verwandte Themen