2013-02-21 2 views
0

Привет У меня есть часть моего документа xml, как показано ниже. В этом документе xsm у меня есть специальный символ как & # x201C; и & # x201D. Я хочу, чтобы они были заменены на «и» на моем выходе HTML, используя XSL.необходимо заменить специальные символы

Я ищу шаблон или любой другой альтернативный метод для сканирования всего моего документа XML и замены там, где когда-либо были найдены специальные символы. Сейчас его заменяют некоторые белые ящики. Пожалуйста, дайте мне знать, как мне это сделать.

<para> 
      <phrase>2.081</phrase> In creating a vehicle like a restricted purpose company, the British Virgin Islands legislature was clearly concerned that, if such vehicles became widely used, there might be a risk that persons dealing with British Virgin Islands companies generally may have become concerned about the ability of companies to engage in day-to-day transactions. Accordingly, it sought to address these concerns by two slightly different mechanisms. Firstly, all restricted purpose companies were required to include the designation &#x201C;(SPV) Limited&#x201D; in their name, to make sure they were readily identifiable (even without reviewing their constitutional documents). Secondly, restricted purpose companies were made subject to licence fees significantly higher than regular companies to limit their use to appropriate cases.</para> 
     <table frame="all" width="100%"> 
      <title>Comparing restricted purpose companies</title> 
      <tgroup cols="3"> 
       <colspec colnum="1" colname="col1" colwidth="33%"/> 
       <colspec colnum="2" colname="col2" colwidth="33%"/> 
       <colspec colnum="3" colname="col3" colwidth="33%"/> 
       <thead> 

Я также хочу способ, чтобы получить число <colspec> элементов ниже <tgroup cols=""> (атрибут COLS должен быть там). Также есть <tgroup> элементов без атрибута cols.

Это мой текущий XSLT:

<?xml version="1.0" encoding="utf-8"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ntw="Number2Word.uri" exclude-result-prefixes="ntw"> 

    <xsl:variable name="ThisDocument" select="document('')"/> 
    <xsl:template match="/"> 


     <html> 
      <head> 
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
       <title> 
        <xsl:value-of select="chapter/title"/> 
       </title> 
       <link rel="stylesheet" href="er:#css" type="text/css" /> 
      </head> 

      <body> 


       <xsl:apply-templates/> 


       <hr /> 
       <section class="tr_footnotes"> 
        <xsl:apply-templates select="//footnote" mode="footnote"/> 
       </section> 

      </body> 
     </html> 
    </xsl:template> 



    <xsl:template match="chapter"> 
     <section> 
      <div class="chapter"> 
       <a name="BVI-CH-{@num}" /> 
       <xsl:variable name="cnum"> 
        <xsl:choose> 
         <xsl:when test="starts-with(@num,'0')"> 
          <xsl:value-of select="substring-after(@num,'0')"/> 
         </xsl:when> 
         <xsl:otherwise> 
          <xsl:value-of select="@num"/> 
         </xsl:otherwise> 
        </xsl:choose> 
       </xsl:variable><div class="chapter-title"><span class="chapter-num"> 
       <xsl:value-of select="concat('Chapter ',$cnum,' ')"/> 
</span> 
       <xsl:apply-templates/> 
      </div></div> 
     </section> 
    </xsl:template> 

    <xsl:template match="chapter/para"> 
     <div class="para align-right"> 
      <span class="format-smallcaps">Para</span>. 
     </div> 
    </xsl:template> 

    <!-- Index templates --> 
    <xsl:template name="toc" match="chapter/toc"> 
     <div class="toc"> 
      <xsl:call-template name="toc-part"></xsl:call-template> 
     </div> 
    </xsl:template> 
    <xsl:template name="toc-part" match="chapter/toc/toc-part"> 
     <div class="toc-part"> 
      <xsl:call-template name="toc-div"></xsl:call-template> 
     </div> 
    </xsl:template> 
    <xsl:template name="toc-div" match="chapter/toc/toc-part/toc-div"> 
     <table class="toc-div"> 
      <tbody> 
       <xsl:for-each select="current()/toc-part/toc-div/*"> 
        <xsl:call-template name="toc-item"></xsl:call-template> 
       </xsl:for-each> 
      </tbody> 
     </table> 
    </xsl:template> 
    <xsl:template name="toc-item" match="chapter/toc/toc-part/toc-div/toc-item"> 

     <xsl:variable name="tocpg" > 
      <xsl:value-of select="concat('#P',current()/toc-pg/text())"/> 
     </xsl:variable> 
     <xsl:variable name="tocpgtag" select="translate($tocpg,'.', '-')" /> 
     <xsl:variable name="chapternumber"> 
      <!-- Get num attribute of parent node --> 
      <xsl:value-of select="ancestor::chapter[1]/@num"/> 
     </xsl:variable> 
     <xsl:variable name="itemlevel"> 
      <xsl:value-of select="$ThisDocument//ntw:nums[@num=$chapternumber]/@word"></xsl:value-of> 
     </xsl:variable> 
     <xsl:variable name="tocitemlevel"> 
      <xsl:value-of select="concat('toc-item-', $itemlevel,'-level')"></xsl:value-of> 
     </xsl:variable> 

     <table class="{$tocitemlevel}"> 
      <tbody> 
       <tr> 
        <td class="toc-item-num"> 
         <xsl:value-of select="current()/@num"/> 
        </td> 
        <td class="toc-title"> 
         <xsl:value-of select="current()/toc-title"/> 
        </td> 
        <td class="toc-pg"> 
         <a href="{$tocpgtag}"> 
          <xsl:value-of select="current()/toc-pg"/> 
         </a> 
        </td> 
       </tr> 
      </tbody> 
     </table> 
    </xsl:template> 
    <!-- Index Templates Complete --> 


    <!-- Paragraph templates --> 
    <xsl:template name="section" match="section"> 
     <!-- Variables--> 
     <xsl:variable name ="classname" > 
      <!--Get name attribute of current node --> 
      <xsl:value-of select="concat('section-',@level)"/> 
     </xsl:variable> 
     <xsl:variable name="chapternumber"> 
      <!-- Get num attribute of parent node --> 
      <xsl:value-of select="ancestor::chapter[1]/@num"/> 
     </xsl:variable> 
     <xsl:variable name="sectnum"> 
      <xsl:number level="any" count="section" format="1"/> 
     </xsl:variable> 

     <!--Create a string variable by concat string method --> 
     <xsl:variable name="sectionname"> 

      <xsl:value-of select="concat('CH-',$chapternumber,'-SEC-0', $sectnum)"/> 
     </xsl:variable> 
     <!-- Template Content --> 
     <div class="{$classname}"> 
      <a name="{$sectionname}"> </a> 
      <div class="section-title"> 
       <span class="section-num"> 
        <xsl:value-of select="@num"/> 
       </span> 
       <xsl:apply-templates/> 
      </div> 

     </div> 
    </xsl:template> 

    <!--<xsl:template name="para" match="section/para"> 
    <xsl:variable name="count2"> 
    <xsl:value-of select="count[child::node()]"></xsl:value-of> 
    </xsl:variable>  
    <xsl:choose> 
        <xsl:when test="$count2 &gt;=1"> 
         <div class="para"> 
      <span class="phrase"> 
       <xsl:value-of select="current()/phrase"/> 
      </span> 

      <xsl:apply-templates/> 
     </div>    
        </xsl:when> 
        <xsl:when test="$count2 &lt; 1"> 
        <span class="phrase"> 
       <xsl:value-of select="current()/phrase"/> 
      </span> 
        <xsl:apply-templates mode="nr"/> 
        </xsl:when> 
       </xsl:choose> 


    </xsl:template> --> 







    <xsl:template name="para" match="section/para"> 
    <xsl:choose> 
        <xsl:when test="contains()"> 
         <div class="para"> 
      <span class="phrase"> 
       <xsl:value-of select="current()/phrase"/> 
      </span> 

      <xsl:apply-templates/> 
     </div> 
        </xsl:when> 
       </xsl:choose> 


    </xsl:template> 



    <xsl:template name="phrase" match="phrase"> 
     <xsl:variable name="phrase"> 
      <xsl:value-of select="concat('P',text())"/> 
     </xsl:variable> 
     <xsl:variable name="newphrase" select="translate($phrase,'.','-')"/> 

     <a> 
      <xsl:attribute name="name"> 
       <xsl:value-of select="$newphrase"></xsl:value-of> 
      </xsl:attribute> 
     </a> 

    </xsl:template> 

    <!-- Table Templates --> 
    <xsl:template name ="table" match="table"> 

     <table style="frame-{current()/@frame} width-{translate(current()/@width,'%','')}"><colgroup></colgroup> 

      <xsl:apply-templates/> 

     </table> 
    </xsl:template> 
    <xsl:template name="tbody" match="tgroup/tbody"> 
     <tbody> 
      <xsl:for-each select="current()/row"> 
       <xsl:call-template name="row"></xsl:call-template> 
      </xsl:for-each> 
     </tbody> 
    </xsl:template> 
    <xsl:template name="thead" match="tgroup/thead"> 
     <xsl:value-of select="name()"></xsl:value-of> 
     <xsl:for-each select="current()/row"> 
      <xsl:value-of select="name()"></xsl:value-of> 
      <tr> 
       <xsl:for-each select="current()/entry"> 
        <xsl:call-template name="headentry"></xsl:call-template> 
       </xsl:for-each> 
      </tr> 
     </xsl:for-each> 

    </xsl:template> 
    <xsl:template name="colspec" match="colspec" > 
     <col class="colnum-{current()/@colnum} colname-{current()/@colname} colwidth-{translate(current()/@colwidth,'%','')}"/> 
    </xsl:template> 
    <xsl:template name="row" match="tbody/row"> 
     <tr> 
      <xsl:for-each select="current()/entry"> 
       <xsl:call-template name="entry" ></xsl:call-template> 
      </xsl:for-each> 
     </tr> 
    </xsl:template> 


    <xsl:template name="entry" match="entry"> 

    <xsl:variable name="count"> 
    <xsl:value-of select="count(preceding-sibling::* | following-sibling::*)"></xsl:value-of> 
    </xsl:variable> 
<xsl:choose> 
    <xsl:when test="$count &lt; 2"> 
     <xsl:if test="position()=1"> 
     <td> 
      <div class="para align-center"> 
       <xsl:value-of select="para[position()=1]"/> 
      </div> 
     </td> 
     <td> 
      <div class="para"> 
       <xsl:value-of select="following-sibling::node()"></xsl:value-of> 
      </div> 
     </td> 
     </xsl:if> 
    </xsl:when> 
    <xsl:when test="$count &gt; 1"> 

     <td> 
      <div class="para"> 

       <!--xsl:value-of select="current()"/--> 
       <xsl:apply-templates/> 
      </div> 
     </td> 
    </xsl:when> 
</xsl:choose> 

    </xsl:template> 



    <xsl:template name="headentry" > 
     <th> 
      <xsl:if test="translate(current()/@namest,'col','') != translate(current()/@nameend,'col','')"> 
       <xsl:variable name="colspan"> 
        <xsl:value-of select="translate(current()/@nameend,'col','') - translate(current()/@namest,'col','') + 1" /> 
       </xsl:variable> 
       <xsl:attribute name="colspan"> 
        <xsl:value-of select="$colspan"></xsl:value-of> 
       </xsl:attribute> 
      </xsl:if> 
      <div class="para"> 
       <xsl:value-of select="current()/para/text()"/> 
      </div> 
     </th> 
    </xsl:template> 
    <!-- Table Templates complete --> 

    <!--List templates --> 
    <xsl:template name="orderedlist" match="orderedlist"> 
     <ol class="orderedlist"> 

      <xsl:apply-templates/> 

     </ol> 
    </xsl:template> 
    <xsl:template name="orderitem" match="orderlist/item"> 
     <li class="item"> 
      <xsl:apply-templates/> 
     </li> 
    </xsl:template> 
    <xsl:template name="orderitempara" match="item/para"> 
     <xsl:variable name="itemnumber"> 
      <xsl:value-of select="parent::item[1]/@num"/> 
     </xsl:variable><li class="item"> 
     <div class="para"> 
      <span class="item-num"> 
       <xsl:value-of select="parent::item[1]/@num"/> 
      </span> 

      <xsl:apply-templates></xsl:apply-templates> 
     </div></li> 
    </xsl:template> 
    <!--List templates Complete --> 

    <!-- Paragraph templates Complete --> 



    <!-- Footnote Templates--> 
    <xsl:template match="footnote"><sup> 
     <a> 
      <xsl:attribute name="name"><xsl:text>footnoteref</xsl:text><xsl:number level="any" count="footnote" format="1"/></xsl:attribute> 
      <xsl:attribute name="href"><xsl:text>#footnote</xsl:text><xsl:number level="any" count="footnote" format="1"/></xsl:attribute> 
      <xsl:attribute name="class"> 
       <xsl:text>tr_ftn</xsl:text><xsl:number level="any" count="footnote" format="1"/> 
       </xsl:attribute> 
       <xsl:number level="any" count="footnote" format="1"/> 

     </a></sup> 
    </xsl:template> 
    <xsl:template match="footnote" mode="footnote"><sup> 
     <li style="list-style-type:none;indent:0"> 
      <a> 
       <xsl:attribute name="name"><xsl:text>footnote</xsl:text><xsl:number level="any" count="footnote" format="1"/></xsl:attribute> 
       <xsl:attribute name="href"><xsl:text>#footnoteref</xsl:text><xsl:number level="any" count="footnote" format="1"/></xsl:attribute> 
       <xsl:attribute name="class"> 
       <xsl:text>tr_ftn</xsl:text><xsl:number level="any" count="footnote" format="1"/> 
       </xsl:attribute> 
        <xsl:number level="any" count="footnote" format="1"/> 

      </a> 
      <xsl:text> </xsl:text> 
      <xsl:apply-templates/> 
     </li></sup> 
    </xsl:template> 
    <xsl:template match="footnote/para/uri"> 
     <a> 

     </a> 
    </xsl:template> 
    <!-- Footnote Templates Complete --> 

    <xsl:template match="content-style"> 
     <xsl:choose> 
      <xsl:when test="@format='smallcaps'"> 
       <xsl:value-of select="translate(normalize-space(.),'ABCDEFGHIJKLMNOPQRSTUVWXZ','abcdefghijklmnopqrstuvwxyz')"/> 
      </xsl:when> 
      <xsl:when test="@format='superscript'"> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:apply-templates/> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 



    <!-- Namespace ntw--> 
    <ntw:nums num="01" word="first"></ntw:nums> 
    <ntw:nums num="02" word="second"></ntw:nums> 
    <ntw:nums num="03" word="third"></ntw:nums> 
    <ntw:nums num="04" word="forth"></ntw:nums> 
    <ntw:nums num="05" word="fifth"></ntw:nums> 
    <ntw:nums num="06" word="sixth"></ntw:nums> 
    <ntw:nums num="07" word="seventh"></ntw:nums> 
    <ntw:nums num="08" word="eighth"></ntw:nums> 
    <ntw:nums num="09" word="nighth"></ntw:nums> 
    <ntw:nums num="10" word="tenth"></ntw:nums> 
    <!-- Namespace ntw ends --> 

</xsl:stylesheet> 

Благодаря

+0

Я думаю, что ваш вопрос не является правильным и полным. Вы говорите, что хотите заменить «на» (это одно и то же). Можете ли вы просмотреть/изменить свой вопрос? Вы также говорите, что теперь «заменены на белые луки (пробелы?). Можете ли вы также опубликовать свой текущий XSLT? –

+0

Привет, Марк, я обновил свой xslt, извините за путаницу, я хотел, чтобы цитаты были стильно, как изогнутые цитаты. –

ответ

0

Поскольку я не совсем уверен, на какое место вы хотите посчитать А.Л. <colspec> элементов здесь объяснение count():

Вы можете использовать count(node-set) (замените набор узлов на нужный набор узлов для подсчета), чтобы подсчитать все узлы, с которых вы его запустили. Например:

сосчитать все <colspec> элементы в XML:

<xsl:value-of select="count(//colspec)" /> 

сосчитать все <colspec> элементы из пути вы сейчас находитесь:

<xsl:value-of select="count(colspec)" /> 

сосчитать все <colspec> элементы из путь теперь ниже элемента <tgroup>:

<xsl:value-of select="count(tgroup/colspec)" /> 

Ваш вопрос о том, «не ясен для меня. Имейте в виду, что HTML и XML имеют некоторые специальные символы, которые вы никогда не можете отображать, как в исходном коде. Смотреть следующим:

HTML специальных символы: http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML XML специальные символы: http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML

Надеется, что это поможет вам!

+0

Спасибо, я решил этот вопрос –

Смежные вопросы