2014-11-05 1 views
1

xsl:copy-of을 사용할 때 xhtml 출력 문서에서 기본 속성 shape="rect"을 표시하지 않는 방법을 알아낼 수 없습니다.xsl : copy-of를 사용할 때 기본 속성 표시 안 함

샘플 XML :

<div class="table"> 
<p class="table-caption"><span class="table-label">Table 7.2</span> Foo<a class="tabfn-ref" 
     href="#s9781483390086.i825" id="s9781483390086.i808" shape="rect"><sup>a</sup></a> in 
    Pricing</p> 
<img alt="Table 11" class="table-image" src="10.4135_9781483390086-table11.jpg"/> 
<table> 
    <tgroup cols="3"> 
     <colspec align="left" colname="1" colnum="1"/> 
     <colspec align="left" colname="2" colnum="2"/> 
     <colspec align="left" colname="3" colnum="3"/> 
     <thead> 
      <row rowsep="1"> 
       <entry align="left"> 
        <p/> 
       </entry> 
       <entry align="left"> 
        <p>N</p> 
       </entry> 
       <entry align="left"> 
        <p>%</p> 
       </entry> 
      </row> 
     </thead> 
     <tbody> 
      <row> 
       <entry> 
        <p>Foo<a class="tabfn-ref" href="#s9781483390086.i826" 
          id="s9781483390086.i809" shape="rect"><sup>b</sup></a></p> 
        <p>1–12</p> 
        <p>13–24</p> 
        <p>25–36</p> 
        <p>37–48</p> 
        <p>49–60</p> 
        <p>61–72</p> 
        <p>73–84</p> 
        <p>85–96</p> 
        <p>More than 96</p> 
       </entry> 
      </row> 
      <row> 
       <entry> 
        <p>Bar<a class="tabfn-ref" href="#s9781483390086.i827" 
          id="s9781483390086.i810" shape="rect"><sup>c</sup></a></p> 
        <p>1–20%</p> 
        <p>21–40%</p> 
        <p>41–60%</p> 
        <p>61–80%</p> 
        <p>More than 80%</p> 
       </entry> 
      </row> 
     </tbody> 
    </tgroup> 
</table> 
<div class="table-notes" id="s9781483390086.i825a"> 
    <p class="table-note" id="s9781483390086.i825b"><span class="label-fn"><a class="tabfn-ref" 
       href="#s9781483390086.i808" id="s9781483390086.i825" shape="rect" 
       ><sup>a</sup></a></span> Foo</p> 
    <p class="table-note" id="s9781483390086.i825c"><span class="label-fn"><a class="tabfn-ref" 
       href="#s9781483390086.i809" id="s9781483390086.i826" shape="rect" 
       ><sup>b</sup></a></span> Bar</p> 
    <p class="table-note" id="s9781483390086.i825d"><span class="label-fn"><a class="tabfn-ref" 
       href="#s9781483390086.i810" id="s9781483390086.i827" shape="rect" 
       ><sup>c</sup></a></span> Too</p> 
</div> 

샘플 XSLT : I 출력에서 ​​shape="rect"을 억제 할 필요가

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xhtml="http://www.w3.org/1999/xhtml" 
    exclude-result-prefixes="xs xhtml" xmlns="http://www.w3.org/1999/xhtml" 
    version="2.0"> 

    <xsl:output method="xhtml" indent="yes"/> 

    <!-- Suppress default shape attribute --> 
    <xsl:template match="*/@shape"/> 

    <!-- Identity template --> 
    <xsl:template match="node()|@*"> 
     <xsl:copy copy-namespaces="no"> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template priority="1" match="//div[@class='table']//p[@class='table-caption']"/> 

    <xsl:template match="table"> 
     <xsl:element name="table"> 
      <xsl:attribute name="hidden" select="'hidden'"/> 
      <xsl:element name="caption"> 
       <xsl:copy-of select="preceding-sibling::p[@class='table-caption'] | *[not(preceding::a/@shape)]"/> 
      </xsl:element> 
      <xsl:apply-templates/> 
     </xsl:element> 
    </xsl:template> 



</xsl:stylesheet> 

. 보시다시피, xsl:copy-of을 사용하는 앵커를 제외한 모든 앵커의 출력은 표시되지 않습니다. 줄에서 억압을 지정하려면 어떻게해야합니까?

<xsl:copy-of select="preceding-sibling::p[@class='table-caption'] | *[not(preceding::a/@shape)]"/> 

이것은 분명히 작동하지 않습니다.

출력 : 클래스 = "tabfn-REF"형상 특성 (복사로 인해) 유지되어 먼저

<div class="table"> 
    <img alt="Table 11" class="table-image" src="10.4135_9781483390086-table11.jpg"/> 
    <table xmlns="http://www.w3.org/1999/xhtml" hidden="hidden"> 
     <caption> 
     <p xmlns="" class="table-caption"> 
      <span class="table-label">Table 7.2</span> Foo <a class="tabfn-ref" 
       href="#s9781483390086.i825" id="s9781483390086.i808" shape="rect"> 
       <sup>a</sup> 
      </a> in Pricing </p> 
     </caption> 
     <tgroup xmlns="" cols="3"> 
     <colspec align="left" colname="1" colnum="1"/> 
     <colspec align="left" colname="2" colnum="2"/> 
     <colspec align="left" colname="3" colnum="3"/> 
     <thead> 
      <row rowsep="1"> 
       <entry align="left"> 
        <p/> 
       </entry> 
       <entry align="left"> 
        <p>N</p> 
       </entry> 
       <entry align="left"> 
        <p>%</p> 
       </entry> 
      </row> 
     </thead> 
     <tbody> 
      <row> 
       <entry> 
        <p>Foo <a class="tabfn-ref" href="#s9781483390086.i826" id="s9781483390086.i809"> 
         <sup>b</sup> 
        </a> 
        </p> 
        <p>1–12</p> 
        <p>13–24</p> 
        <p>25–36</p> 
        <p>37–48</p> 
        <p>49–60</p> 
        <p>61–72</p> 
        <p>73–84</p> 
        <p>85–96</p> 
        <p>More than 96</p> 
       </entry> 
      </row> 
      <row> 
       <entry> 
        <p>Bar <a class="tabfn-ref" href="#s9781483390086.i827" id="s9781483390086.i810"> 
         <sup>c</sup> 
        </a> 
        </p> 
        <p>1–20%</p> 
        <p>21–40%</p> 
        <p>41–60%</p> 
        <p>61–80%</p> 
        <p>More than 80%</p> 
       </entry> 
      </row> 
     </tbody> 
     </tgroup> 
    </table> 
    <div class="table-notes" id="s9781483390086.i825a"> 
     <p class="table-note" id="s9781483390086.i825b"> 
     <span class="label-fn"> 
      <a class="tabfn-ref" href="#s9781483390086.i808" id="s9781483390086.i825"> 
       <sup>a</sup> 
      </a> 
     </span> Foo </p> 
     <p class="table-note" id="s9781483390086.i825c"> 
     <span class="label-fn"> 
      <a class="tabfn-ref" href="#s9781483390086.i809" id="s9781483390086.i826"> 
       <sup>b</sup> 
      </a> 
     </span> Bar </p> 
     <p class="table-note" id="s9781483390086.i825d"> 
     <span class="label-fn"> 
      <a class="tabfn-ref" href="#s9781483390086.i810" id="s9781483390086.i827"> 
       <sup>c</sup> 
      </a> 
     </span> Too </p> 
    </div> 
</div> 

. 나는 억압하기 위해 이것을 필요로한다.

+0

** 유효한 ** 코드 (필요한 경우에만 최소화하는 것이 바람직 함)를 게시하여 문제를 재현 할 수 있도록하십시오. 일반적으로 은 딥 카피를 수행합니다. 선택 및 선택할 수 없습니다. –

답변

2

xsl:copy-of을 사용할 때 특성 또는 노드를 제외 할 수있는 기능이 없습니다. 선택한 노드의 전체 복사본을 수행합니다.

이미 @shape 속성을 억제하고 이미 //div[@class='table']//p[@class='table-caption'] 일치 빈 템플릿을 가지고 빈 템플릿으로 신원 변환을 사용하고 있기 때문에이 할 수있는 가장 쉬운 방법은 모드 <xsl:apply-templates><xsl:copy-of>을 변경하고 템플릿을 정의하는 것 그 모드에서 템플릿을 복사하고 적용합니다.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:xhtml="http://www.w3.org/1999/xhtml" 
    exclude-result-prefixes="xs xhtml" xmlns="http://www.w3.org/1999/xhtml" 
    version="2.0"> 

    <xsl:output method="xhtml" indent="yes"/> 

    <!-- Suppress default shape attribute --> 
    <xsl:template match="*/@shape"/> 

    <!-- Identity template --> 
    <xsl:template match="node()|@*"> 
     <xsl:copy copy-namespaces="no"> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template priority="1" 
        match="//div[@class='table']//p[@class='table-caption']"/> 

    <xsl:template match="//div[@class='table']//p[@class='table-caption']" 
        mode="caption"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="table"> 
     <table hidden="hidden"> 
      <caption> 
       <xsl:apply-templates 
           select="preceding-sibling::p[@class='table-caption'] 
            | *[not(preceding::a/@shape)]" mode="caption"/> 
      </caption> 
      <xsl:apply-templates/> 
     </table> 
    </xsl:template> 

</xsl:stylesheet> 
+0

Mads에게 감사합니다. 이것이 내가 필요한 것입니다. 나는 그것이 XML에 서 있던 표 캡션의 출력을 억제 할 필요가있을 때 여기에서 apply-templates를 사용하는 해결책을 제시하는 데 어려움을 겪고 있었다. 모드 사용은 멋지게 작동합니다. 다시 한번 감사드립니다. – user2093335