2012-01-02 47 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> 

$列表是一組<title>節點。祖先同名兄弟姐妹

<title>的深度各不相同,但總是在<header>下的某處。 <header>的深度各不相同,但它對於給定$列表中的所有節點的根深度始終相同。

給定一個$ list,我需要一個循環遍歷標題的for-each循環。

當$列表中的唯一節點是標題A,I需要循環只能通過標題1.

當$列表中的節點是標題B和C,I需要遍歷頭2,圖3和4.

+0

對不起,但目前形式的問題無法理解。請提供完整的(但儘可能小的)XML文檔,並確切選擇哪些節點。 – 2012-01-02 03:00:18

+0

另外,沒有定義'$ items'變量或在XPath表達式中引用...... ??? – 2012-01-02 03:10:04

+0

我已經提供了一個更完整的例子,並試圖使問題可以理解。 – JPM 2012-01-02 05:14:23

回答

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>