2012-01-02 8 views
1
<corpus> 
    <header id="1"> 
     <file> 
      <info> 
       <title id="A" /> 
      </info> 
     </file> 
    </header> 
    <TEI> 
     <header id="2"> 
      <file> 
       <info> 
        <title id="B" /> 
       </info> 
      </file> 
     </header> 
     <header id="3"> 
      <file> 
       <info> 
        <record> 
          <title id="C" /> 
        </record> 
       </info> 
      </file> 
     </header> 
     <header id="4"> 
      <file> 
      </file> 
     </header> 
    </TEI> 
</corpus> 

$ listは<title>のセットです。先祖の同名の兄弟

深さは<title>ですが、常に<header>のどこかにあります。 <header>の深さは異なりますが、ルートからの深さは、指定された$リスト内のすべてのノードで常に同じです。

$リストがあると、ヘッダをループするfor-eachループが必要です。

$リスト内の唯一のノードは、タイトルAであり、Iは、$リスト内のノードは、タイトルB及びCである場合、私はヘッダー2、3を介してループに必要1

ヘッダのみをループに必要と4.

+0

申し訳ありませんが、現在の形式の質問は理解できません。完全な(できるだけ小さい)XML文書を提供し、正確にどのノードを選択する必要がありますか。 –

+0

また、 '$ items'変数はまったく定義されておらず、XPath式で参照されていません... ??? –

+0

私は完全な例を提供し、質問を分かりやすくしようとしました。 – JPM

答えて

0

使用

$list/ancestor::header[1]/../header 

XSLT - ベースの検証

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

<xsl:variable name="vList1" select= 
    "/*/header[1]/*/*/title"/> 

<xsl:variable name="vList2" select= 
    "/*/TEI//title"/> 

<xsl:template match="/"> 
    <xsl:copy-of select="$vList1"/> 
==== 
    <xsl:copy-of select="$vList2"/> 
==== 
    <xsl:copy-of select= 
    "$vList1/ancestor::header[1]/../header"/> 
==== 
    <xsl:copy-of select= 
    "$vList2/ancestor::header[1]/../header"/> 
</xsl:template> 
</xsl:stylesheet> 

この変換が提供されるXML文書に印加された場合:

<corpus> 
    <header id="1"> 
     <file> 
      <info> 
       <title id="A" /> 
      </info> 
     </file> 
    </header> 
    <TEI> 
     <header id="2"> 
      <file> 
       <info> 
        <title id="B" /> 
       </info> 
      </file> 
     </header> 
     <header id="3"> 
      <file> 
       <info> 
        <record> 
         <title id="C" /> 
        </record> 
       </info> 
      </file> 
     </header> 
     <header id="4"> 
      <file> 
      </file> 
     </header> 
    </TEI> 
</corpus> 

XPath式が評価され、それぞれの場合においてたかっheader要素が選択され、出力

<title id="A"/> 
==== 
    <title id="B"/> 
<title id="C"/> 
==== 
    <header id="1"> 

    <file> 

     <info> 

     <title id="A"/> 

     </info> 

    </file> 

</header> 
==== 
    <header id="2"> 

    <file> 

     <info> 

     <title id="B"/> 

     </info> 

    </file> 

</header> 
<header id="3"> 

    <file> 

     <info> 

     <record> 

      <title id="C"/> 

     </record> 

     </info> 

    </file> 

</header> 
<header id="4"> 

    <file> 

    </file> 

</header> 
関連する問題