【问题标题】:check condition in xslt检查 xslt 中的条件
【发布时间】:2012-07-16 06:19:40
【问题描述】:

下面是输入 XML (Little Big) 对不起更大的输入 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 有章节、单元(带 tilda 符号的编号)和页数

2) XML 有章节、单元(不带 tilda 符号的编号)和页数

3) XML 只有页面 ex..(note & description) 所以在这里如果例如我有 10~(unit) 输出将显示 10, 如果输入 xml 没有值 (for unit)在输出 xml 中,它将显示 10 作为默认数字——昨天的 karthic

请帮助我并在 XSLT 的帮助下指导我。

问候 卡西克

【问题讨论】:

  • 您的 XML 输入示例格式不正确,因为它缺少 lessonstutorial 的结束元素。另外,您能否解释一下转换是如何工作的。不清楚元素 historicalsocialtoc 来自哪里,因为它们根本没有出现在输入样本中。谢谢!
  • 嗨 Tim 现在我更新了输入 xml,如你所说。它必须使用 XSLT 动态创建历史、社交和 TOC

标签: xml xslt xslt-1.0 xslt-2.0


【解决方案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>

【讨论】:

  • 嗨@Dimitre 感谢输出这工作正常但如果我想再添加一课我需要添加 xslt 吗?请指导我
  • 嗨@Dimitre 是否可以为此做动态,请指导我
  • @karthic:当前问题已完全回答。请提出一个新问题。请考虑接受答案。
【解决方案2】:

如果你只想删除“~”,使用 translate(xxx, '~', '')

除此之外,恐怕您没有明确说明您的要求。比如这个子句我看不懂:

如果默认情况下没有值,则必须显示单位 10

【讨论】:

  • 嗨迈克尔,现在我希望我的输入 XML 必须区分为三个类别 1)第 2 章)单元和 3)页面输入将采用三种不同类型的格式 1)XML 有章节,unit(number with tilda symbol) & pages 2) XML有Chapter,unit(number without tilda symbol) & pages 3) XML只有page ex..(note & description) 所以这里如果我有10~ (单位)输出将显示 10,如果输入 xml 在输出 xml 中没有值(单位),它将显示 10 作为默认数字
  • 大家好,请帮助我如何将输入 XML 作为输出 XML 提前谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
  • 2021-12-29
相关资源
最近更新 更多