如何获取具有其属性值的第一个<w:p>节点的属性值以“标题”开头并分配给xslt 2.0中的变量?</w:p>

时间:2011-10-01 08:46:07

标签: xml xslt xpath xslt-2.0

这是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. 找到后,将该属性值(例如,第二个<w:p><w:pPr><w:pStyle>中的Heading1)分配给变量(例如,xslt文件中的variableName)。

  3. 将该变量(例如,xslt文件中的topLevelHeadings)分配到我想要的特定另一个变量中。

  4. 这是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 个答案:

答案 0 :(得分:3)

<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]"
/>