2011-09-26 2 views
1

XSLT 2.0을 사용하여 현재 노드의 모든 노드 <w:p> (<w:body>)을 계산하는 방법은 무엇입니까?

<w:body> <w:p><w:r><w:t>para1</w:t></w:r></w:p> 
<w:p><w:r><w:t>para2</w:t></w:r></w:p> 
<w:p><w:r><w:t>para3</w:t></w:r></w:p> 
<w:p><w:r><w:t>para4</w:t></w:r></w:p> 
<w:p><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> <!-- Assume This 
is my Current Node --> 

<w:tc><w:p><w:r><w:t>para8</w:t></w:r></w:p></w:tc> 
       </w:tr> </w:tbl> </w:body> 

그래서, 지금은 <w:tbl> 내에서 현재 노드의 <w:body> 또한 이전 <w:p> 내부의 모든 <w:p>의 수를 얻고 싶은 내 XML 파일입니다. 그래서,이 시나리오의 경우, 내 예상 카운트는 내가 그것을 어떻게 ...

이 시간에 7 나를이 얻을하는 데 도움이 ...

+0

질문을 명확하게 할 수 있습니까? 몇 건 언급하고 있니? – Kris

+0

@ Mr.K :: Question edited ... 희망, Ranga는 그렇게 생각합니다 ... – Saravanan

+0

당신은 간단한 해결 방법이 있습니다. 모두 은 doc.selectNodes (XPath)의 길이를 사용하여 루트에서 참조하십시오. 선택된 노드의 지점에서 이제 나머지 노드를 계산합니다. 차이점을 찾아라. 나는 이것이 존경받는 해결책이 아니라는 것을 안다. – Kris

답변

2

사용 :

count($vtheNode/preceding::w:p) 

$vtheNode이 귀하의 노드입니다.

XSLT (모두 1.0 및 2.0) 용액이 변환이 제공된 XML 문서에인가

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:w="w:w"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:variable name="vtheNode" select= 
    "/w:body/w:tbl/w:tr/w:tc[last()]"/> 

<xsl:template match="/"> 
    <xsl:value-of select="count($vtheNode/preceding::w:p)"/> 
</xsl:template> 
</xsl:stylesheet> 

는 (공간이 있도록 정의와 잘 구성)

<w:body xmlns:w="w:w"> 
    <w:p> 
     <w:r> 
      <w:t>para1</w:t> 
     </w:r> 
    </w:p> 
    <w:p> 
     <w:r> 
      <w:t>para2</w:t> 
     </w:r> 
    </w:p> 
    <w:p> 
     <w:r> 
      <w:t>para3</w:t> 
     </w:r> 
    </w:p> 
    <w:p> 
     <w:r> 
      <w:t>para4</w:t> 
     </w:r> 
    </w:p> 
    <w:p> 
     <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> 
      <!-- Assume This is my Current Node --> 
      <w:tc> 
       <w:p> 
        <w:r> 
         <w:t>para8</w:t> 
        </w:r> 
       </w:p> 
      </w:tc> 
     </w:tr> 
    </w:tbl> 
</w:body> 

올바른 결과가 생성됩니다. :

7 

에 유의을 수행하십시오 preceding::ancestor:: 축이 중복 없기 때문에, 문서의 구조에 의존하지 않는 일반적인 솔루션은 계정에 원 중 일부는 노드 수 계산하는 가능성을합니다 조상이 되십시오 :