2017-01-18 8 views
0
<?xml version="1.0" encoding="utf-8"?> 
<order> 
<press_mow> 
    <mow_section_id>1</mow_section_id> 
    <mow_webs> 
     <mow_web> 
      <web_number>1</web_number> 
     </mow_web> 
    </mow_webs> 
</press_mow> 
<press_mow> 
    <mow_section_id>1</mow_section_id> 
    <mow_webs> 
     <mow_web> 
      <web_number>1</web_number> 
     </mow_web> 
    </mow_webs> 
</press_mow> 
<press_mow> 
    <mow_section_id>2</mow_section_id> 
    <mow_webs> 
     <mow_web> 
      <web_number>1</web_number> 
     </mow_web> 
     <mow_web> 
      <web_number>2</web_number> 
     </mow_web> 
     <mow_web> 
      <web_number>2</web_number> 
     </mow_web> 
     <mow_web> 
      <web_number>3</web_number> 
     </mow_web> 
     <mow_web> 
      <web_number>3</web_number> 
     </mow_web> 
    </mow_webs> 
</press_mow> 
<press_mow> 
    <mow_section_id>2</mow_section_id> 
    <mow_webs> 
     <mow_web> 
      <web_number>1</web_number> 
     </mow_web> 
     <mow_web> 
      <web_number>2</web_number> 
     </mow_web> 
     <mow_web> 
      <web_number>2</web_number> 
     </mow_web> 
     <mow_web> 
      <web_number>3</web_number> 
     </mow_web> 
     <mow_web> 
      <web_number>3</web_number> 
     </mow_web> 
    </mow_webs> 
</press_mow> 
<press_mow> 
    <mow_section_id>2</mow_section_id> 
    <mow_webs> 
     <mow_web> 
      <web_number>1</web_number> 
     </mow_web> 
     <mow_web> 
      <web_number>2</web_number> 
     </mow_web> 
     <mow_web> 
      <web_number>2</web_number> 
     </mow_web> 
     <mow_web> 
      <web_number>3</web_number> 
     </mow_web> 
     <mow_web> 
      <web_number>3</web_number> 
     </mow_web> 
    </mow_webs> 
</press_mow> 

</order> 

ユニークmow_websのリストを作成しようとしてい/ mow_web/web_number各内しかしmenchianグループ化を使用して、私のどちらかがそれぞれ内でのみ取得123回または全ての数字は、イムが間違っているのかを見ることができないpress_mow取得press_mow任意の助けが大いに感謝します。繰り返し値を無視し、XML 1.0

所望の出力

1 = 1 
1 = 1 
2 = 1,2,3 
2 = 1,2,3 
2 = 1,2,3 

は、この方法のすべての説明を見て時間を費やしているし、以前に良い効果を使用していたが、私のエラーは、この機会にあるものを見ることができません。以下の2つの異なる方法を試みました。 xml 1.0のみ使用できます。私が間違いを犯した場合、これは私の最初のポスト申し立てです。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:output method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> 

<xsl:key name="webnoB" match="mow_web" use="web_number" /> 
<xsl:key name="webnoC" match="mow_webs" use="mow_web/web_number" /> 
<xsl:template match="order"> 

****** HERE TESTING場合は********

<xsl:for-each select="press_mow"> 
    SecIdA:<xsl:value-of select="mow_section_id"/>/ 
    <xsl:for-each select="mow_webs"> 
     <xsl:for-each select="mow_web[count(. | key('webnoB', web_number)   [1]) = 1]"> 
      WebNoA:<xsl:value-of select="web_number"/> 
     </xsl:for-each> 
    </xsl:for-each> 
</xsl:for-each> 
************** 
<xsl:for-each select="press_mow[count(. | key('webnoC', web_number)[1]) = 1]"> 
    secidB:<xsl:value-of select="mow_section_id"/>/ 
    <xsl:for-each select="mow_webs"> 
     <xsl:for-each select="mow_web"> 
      WebNo.B:<xsl:value-of select="web_number"/> 
     </xsl:for-each> 
    </xsl:for-each> 
</xsl:for-each> 
******TESTING HERE******** 

</xsl:template> 
+0

(コードのように)正確な結果を投稿してくださいあなたは得ることを期待しています。 –

答えて

0

- それはそうと - あなたが明確なの一覧を表示したいですweb_numberの値がそれぞれpress_mowである場合は、キーの定義と使用方法に識別子press_mowを含める必要があります。

入力にpress_mowノードを識別する一意の値がないため、generate-id()関数を使用する必要があります。

は、以下のスタイルシートを考えてみましょう:あなたの入力例に

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:key name="wn" match="mow_web" use="concat(web_number, '|', generate-id(ancestor::press_mow))" /> 

<xsl:template match="/order"> 
    <root> 
     <xsl:for-each select="press_mow"> 
      <section id="{mow_section_id}"> 
       <xsl:for-each select="mow_webs/mow_web[count(. | key('wn', concat(web_number, '|', generate-id(ancestor::press_mow)))[1]) = 1]"> 
        <number> 
         <xsl:value-of select="web_number"/> 
        </number> 
       </xsl:for-each> 
      </section> 
     </xsl:for-each> 
    </root> 
</xsl:template> 

</xsl:stylesheet> 

応用し、その結果は以下のようになります。

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <section id="1"> 
     <number>1</number> 
    </section> 
    <section id="1"> 
     <number>1</number> 
    </section> 
    <section id="2"> 
     <number>1</number> 
     <number>2</number> 
     <number>3</number> 
    </section> 
    <section id="2"> 
     <number>1</number> 
     <number>2</number> 
     <number>3</number> 
    </section> 
    <section id="2"> 
     <number>1</number> 
     <number>2</number> 
     <number>3</number> 
    </section> 
</root> 
+0

あなたの迅速な対応をありがとう、私はこれを試し、私の進歩についてあなたを更新します。多くのありがとう – Mart123

+0

これは完全にあなたに感謝しました。私はコードを理解していないか、それがどのように機能しているのかを認める必要があります。キーとIDコードを説明することは可能ですか?または、どこかで私はこれがどのように機能しているかについてもっと学ぶことができます。私はインターネットを徘徊しています。これについて私の頭を上げることはできません...あなたの助けが大いに感謝されました。 – Mart123

+0

'generate-id()'関数は、入力XML内のすべてのノードに対して一意のIDを返します。このキーは、 'web_number'の値とその祖先の' press_mow'のIDを組み合わせたもので、 'press_mow'の中で一意の値を選ぶことができます。これがなければ、Muenchianメソッドはドキュメント全体で一意の値を選択します。 –

関連する問題