2016-11-06 11 views
0

XML文書を条件に基づいて分割するxpath式が必要です。これにより、各ユニークについて1つの文書が得られます(下の例のように)。ノード値のxpath式

以下のxmlサンプルは、2つのドキュメント(id 100と200)になります。私は値をハードコードしたくない...

どのように私はxpath式でこれを行うことができますか?

(私は表現/データ/従業員と4つの文書を取得することができます知っている)

例:

<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> 

出力例:

ドキュメント#1

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

ドキュメント#2

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

。 XSLTをお探しですか? – Lucero

答えて

0

XPathはドキュメント変換ではなくクエリ言語です。したがって、XPathのみでタスクを実行することはできません。あなたの質問は、それが実行されている環境についても何も教えていないので、徹底的な答えを出すことはできません。言われていること

、このアプローチは、何が必要かもしれません:/data/employee/idため

  • 問合せおよびセット(個別値の例えば袋)にノード値を追加します。
  • 異なる値をループし、次のようなクエリを作成して、従業員ごとに一致するノードを取得します。/data/employee[id=ID](ここでは、IDを現在反復処理中の別の値に置き換えます)。
  • これらの結果を使用して派生ドキュメントを構築できますが、これは環境によって異なります。 XSLT 2.0で
2

これは、標準的なグループ化ユースケースである:XPathはクエリ言語で、それが文書を作成/変換/分割されません

<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>