2016-09-02 8 views
0

xsltを使用して同じ要素で同じ要素を2回選択するという要件があります。私のxml、A、B、Cおよび他のすべての要素には、私は私のXMLを表示しています同じ要素を取得する方法2回目は同じ親要素に入った

..

<parent> 
      <a>0001</a> 
      <b>05</b> 
      <c>20160825</c> 
      <d>9463</d> 
      <e>anders skov petersen</e> 
      <f></f> 
      <g></g> 
      <h></h> 
      <i></i> 
      <a>0002</a> 
      <b>05</b> 
      <c>20160825</c> 
      <d>9463</d> 
      <e>anders skov petersen</e> 
      <f></f> 
      <g></g> 
      <h></h> 
      <i></i> 
     </parent> 

は二回来ました。だから、XSLTで2回目に来た要素の値を取得しなければならない場合は、any1がこれを行う方法を教えてください?

+0

あなたは要素に基づいて重複を探していますか?名?または要素の内容について?例えば以下のような複雑なコンテンツが存在することができるか? 'バー'? –

答えて

1

あなたは、次のXPath式

/parent/a[2] 

これは参照してください

/parent/a[position()=2] 

の短い形式https://www.w3.org/TR/xpath/

0

であると第2のAにアクセスすることができます(名前これは同じ要素を識別するために試してみてください、コンテンツではない)が同じ親の中に2回出現する:

入力XML:

<parent> 
    <a>0001</a> 
    <b>05</b> 
    <c>20160825</c> 
    <d>9463</d> 
    <e>anders skov petersen</e> 
    <f></f> 
    <g></g> 
    <h></h> 
    <i></i> 
    <a>0002</a> 
    <b>05</b> 
    <c>20160825</c> 
    <d>9463</d> 
    <e>anders skov petersen</e> 
    <f></f> 
    <g></g> 
    <h></h> 
    <i></i> 
    <j>New element</j> 
</parent> 

XSLT 1.0:

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

<xsl:key name="kDuplicate" match="*[generate-id(parent::*) = 
           generate-id(current()/parent::*)]" use="name()"/> 

<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()[key('kDuplicate', name())[2]]"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="parent"> 
    <xsl:copy> 
     <xsl:for-each select="descendant::*[key('kDuplicate', name())[2]]"> 
     <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy> 
     </xsl:for-each> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

結果:(要素jが表示されない、それは親の中に一度だけ表示されているとして)

<parent> 
    <a>0001</a> 
    <b>05</b> 
    <c>20160825</c> 
    <d>9463</d> 
    <e>anders skov petersen</e> 
    <f/> 
    <g/> 
    <h/> 
    <i/> 
    <a>0002</a> 
    <b>05</b> 
    <c>20160825</c> 
    <d>9463</d> 
    <e>anders skov petersen</e> 
    <f/> 
    <g/> 
    <h/> 
    <i/> 
</parent> 
関連する問題