Как получить атрибутивное значение первогоузел, имеющий значение атрибута, начинается с "Заголовок" и присваивается переменной в xslt2.0? - PullRequest
0 голосов
/ 01 октября 2011

Это XML-документ.

<w:document xmlns:w="w">
 <w:body>
   <w:p>
     <w:pPr>
     <w:pStyle w:val="Normal"/>
     </w:pPr>
        <w:r>
           <w:t>
               Para1
            </w:t>
        </w:r>
     </w:p>
   <w:p>
     <w:pPr>
     <w:pStyle w:val="Heading1"/>
     </w:pPr>
        <w:r>
           <w:t>
               Para2
            </w:t>
        </w:r>
     </w:p>
   <w:p>
     <w:pPr>
     <w:pStyle w:val="Heading2"/>
     </w:pPr>
        <w:r>
           <w:t>
               Para3
            </w:t>
        </w:r>
     </w:p>
   <w:p>
     <w:pPr>
     <w:pStyle w:val="Heading1"/>
     </w:pPr>
        <w:r>
           <w:t>
               Para4
            </w:t>
        </w:r>
     </w:p>
   <w:p>
     <w:pPr>
     <w:pStyle w:val="Heading2"/>
     </w:pPr>
        <w:r>
           <w:t>
               Para5
            </w:t>
        </w:r>
     </w:p>

   <w:tbl>
         <w:tr>
            <w:tc>
               <w:p>
                  <w:r>
                    <w:t>
                         Para6
                    </w:t>
                   </w:r>
                </w:p>
              </w:tc>
            <w:tc>
               <w:p>
                  <w:r>
                    <w:t>
                         Para7 
                    </w:t>
                   </w:r>
                </w:p>
              </w:tc>
           </w:tr>
        </w:tbl>
     <w:p>
     <w:pPr>
       <w:pStyle w:val="Heading1"/>
     </w:pPr>
        <w:r>
           <w:t>
               Para8
            </w:t>
        </w:r>
     </w:p>
  <w:tbl>
         <w:tr>
            <w:tc>
               <w:p>
                  <w:r>
                    <w:t>
                         Para9
                    </w:t>
                   </w:r>
                </w:p>
              </w:tc>
            <w:tc>
               <w:p>
                  <w:r>
                    <w:t>
                         Para10
                    </w:t>
                   </w:r>
                </w:p>
              </w:tc>
           </w:tr>
        </w:tbl>
    <w:p>
     <w:pPr>
      <w:pStyle w:val="Heading2"/>
     </w:pPr>
        <w:r>
           <w:t>
               Para11
            </w:t>
        </w:r>
     </w:p>
</w:body>
</w:document>

Теперь,

  1. Я хочу сначала найти <w:p><w:pPr><w:pStyle>, значение атрибута которого w:val начинается с "Заголовок».

  2. После обнаружения этого присвойте значение этого атрибута (например, Heading1, которое находится во втором <w:p><w:pPr><w:pStyle>) переменной (например, variableName в файле xslt).

  3. Назначьте эту переменную (например, topLevelHeadings в файле xslt) в другую конкретную переменную, где я хотел.

Это Xslt-файл для вашей справки...

<xsl:template match="*">
  <Document>
       <xsl:variable name="variableName" select="?"/> <!-- here i want the stuff -->
       <xsl:variable name="topLevelHeadings" select = "//w:body/w:p[w:pPr[w:pStyle(@w:val,'$variableName')]]"/>

     <xsl:choose>
         <xsl:when test="$topLevelHeadings">
              <!-- Do things here -->
         </xsl:when>
        <xsl:otherwise>
             <!-- Do things here -->
        </xsl:otherwise>
    </xsl:choose>

  </Document>
</xsl:template>

Пожалуйста, помогите мне выйти из этого вопроса ...

1 Ответ

3 голосов
/ 01 октября 2011
<xsl:variable 
  name="variableName"     
  select="(//w:p/w:pPr/w:pStyle[starts-with(@w:val, 'Heading')])[1]/@w:val" 
/>
<xsl:variable 
  name="topLevelHeadings" 
  select="//w:p[w:pPr/w:pStyle/@w:val = $variableName]"
/>
...