检查XSLT条件(check condition in xslt)

2019-07-30 11:09发布

下面是输入XML(小小大),比较遗憾的是更大的输入XML和以及输出XML

<tutorial>
<lessons>
   <lesson>
     chapter unit 1 page
</lesson>
    <lesson>
        chapter unit 10~ page
    </lesson>
    <lesson>
        chapter unit page
    </lesson>
    <lesson>
        note lesson
    </lesson>
 <lessons1>
    <lesson>
        chapter unit 1 page
    </lesson>
    <lesson>
        description page
    </lesson>
    <lesson>
        chapter unit page
    </lesson>
</lessons1>
</lessons>
</tutorial>

下面是我的输出XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<Geography>


 <historical>
  <social>
     <toc1>
        <toc>
           <chapter>chapter</chapter>
           <unit>unit 1</unit>
           <pages>page</pages>
        </toc>
         <toc>
           <chapter>chapter</chapter>
           <unit>unit 10</unit>
           <pages>page</pages>
        </toc>
         <toc>
           <chapter>chapter</chapter>
           <unit>unit 10</unit>
           <pages>page</pages>
        </toc>
        <toc>
          <sample>
           <original>Note Lesson</orginal>
          </sample>
        </toc>
     </toc1>
     <toc2>
        <toc>
           <chapter>chapter</chapter>
           <unit>unit 1</unit>
           <pages>page</pages>
        </toc>
        <toc>
          <sample>
           <original>description page</orginal>
          </sample>
        </toc>
         <toc>
           <chapter>chapter</chapter>
           <unit>unit 10</unit>
           <pages>page</pages>
        </toc>
     </toc2>
  </social>

它是安静的大输出XML文件,遗憾的是。

在单元,如果我在输出有单元1将显示为单元1,但,例如,如果我已经unit10〜它将显示为单元10中的〜已经以显示给去除,如果有在缺省没有值它具有单元10。

小简要说明

我的输出XML在三个类别区分

1)第一章

2)单元

3)页

输入将在三种不同类型的格式

1)XML有章,单元(具有蒂尔达符号数)页

2)XML有章,单元(没有蒂尔达符号数)页

3)XML只有页面前..(注释和说明)所以在这里,如果例如我有10〜(单元)的输出将在输出xml显示10中,如果输入的XML不具有值(单元)它会显示10默认号码 - 昨天karthic

请帮助我,引导我用XSLT的帮助。

问候Karthic

Answer 1:

这一转变

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

      <xsl:variable name="vNames" select="'chapter', 'unit', 'pages'"/>

     <xsl:template match="lessons">
        <Geography>
          <historical>
            <social>
               <toc1>
                 <xsl:apply-templates select="lesson"/>
               </toc1>
               <xsl:apply-templates select="lessons1"/>
            </social>
          </historical>
        </Geography>
     </xsl:template>

     <xsl:template match="lesson[starts-with(normalize-space(), 'chapter')]">
      <xsl:variable name="vNorm" select=
                     "translate(normalize-space(), '~', '')"/>
      <xsl:variable name="vAtNumber" select=
                     "substring-after($vNorm, 'chapter unit')"/>
      <xsl:variable name="vNum" select=
       "if(matches($vAtNumber, '^\s*\d+'))
          then replace($vAtNumber, '(^\s*(\d+)).*$', '$2')
          else '10'
       "/>
      <xsl:analyze-string select="."
       regex="(chapter\s+)(unit\s*)(((\d*~?)\s+)?page)">
        <xsl:matching-substring>
          <toc>
             <chapter>chapter</chapter>
             <unit>unit <xsl:value-of select="$vNum"/></unit>
             <pages>page</pages>
          </toc>
        </xsl:matching-substring>
      </xsl:analyze-string>
     </xsl:template>

     <xsl:template match="lesson">
       <sample>
         <original><xsl:value-of select="normalize-space()"/></original>
       </sample>
     </xsl:template>

     <xsl:template match="lessons1">
      <toc2>
       <xsl:apply-templates/>
      </toc2>
     </xsl:template>
</xsl:stylesheet>

当施加在提供的XML文档:

<tutorial>
    <lessons>
       <lesson>
         chapter unit 1 page
    </lesson>
        <lesson>
            chapter unit 10~ page
        </lesson>
        <lesson>
            chapter unit page
        </lesson>
        <lesson>
            note lesson
        </lesson>
     <lessons1>
        <lesson>
            chapter unit 1 page
        </lesson>
        <lesson>
            description page
        </lesson>
        <lesson>
            chapter unit page
        </lesson>
    </lessons1>
    </lessons>
</tutorial>

产生想要的,正确的结果:

<Geography>
   <historical>
      <social>
         <toc1>
            <toc>
               <chapter>chapter</chapter>
               <unit>unit 1</unit>
               <pages>page</pages>
            </toc>
            <toc>
               <chapter>chapter</chapter>
               <unit>unit 10</unit>
               <pages>page</pages>
            </toc>
            <toc>
               <chapter>chapter</chapter>
               <unit>unit 10</unit>
               <pages>page</pages>
            </toc>
            <sample>
               <original>note lesson</original>
            </sample>
         </toc1>
         <toc2>
            <toc>
               <chapter>chapter</chapter>
               <unit>unit 1</unit>
               <pages>page</pages>
            </toc>
            <sample>
               <original>description page</original>
            </sample>
            <toc>
               <chapter>chapter</chapter>
               <unit>unit 10</unit>
               <pages>page</pages>
            </toc>
         </toc2>
      </social>
   </historical>
</Geography>


Answer 2:

如果你只是想去掉“〜”,使用翻译(XXX,“〜”,“”)

除此之外,恐怕你没有将你的要求明确。 举例来说,我不明白这个子句:

如果在默认情况下没有价值它具有显示单元10



文章来源: check condition in xslt