首页 文章

解析xslt中单个标记下的多个标记的文本

提问于
浏览
0

我在xml和xslt工作 . 我有以下xml

<book>
  <book-part book-part-type="chapter" book-part-number="1" id="PT-161_ch_1">
 <book-meta>
 <book-title-group>
        <book-title>Software&#x002d;Hardware Integration in Automotive Product Development</book-title>
      </book-title-group>
    </book-meta>
    <book-part-meta>
     <title-group>
    <title>
      <bold>2008-21-0043</bold>
      </title>
      </title-group>
     </book-part-meta>
<body>
   <sec id="ch1.1">
    <title>INTRODUCTION</title>
    <p>The trends of increased functionality, improved performance, reduced size and increased complexity continue to evolve in the automotive electronics market. New system architectures are providing the performance and memory capability necessary to keep up with the hardware performance and software growth required by the automotive market trends. All of this technology growth implies a higher product cost and increased engineering effort required to develop these new products.</p>
   </sec>
</body>

我有以下XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" omit-xml-declaration="yes" doctype-public="-//W3C//DTD HTML 4.0 Transitional//EN"/>

<xsl:template match="book-part">

<html>
  <head>

  </head>
  <body>
    <xsl:for-each select="book-meta">
      <p>
        <b>
          <xsl:value-of select="book-title-group/book-title"/>
        </b>
      </p>
    </xsl:for-each>
    <xsl:for-each select="book-part-meta">
      <p>
        <b>
          <xsl:value-of select="title-group/title"/>
        </b>
      </p>
    </xsl:for-each>
    <xsl:for-each select="body/sec">
      <p>
        <ol>
          <li>
        <b>
          <div>
          <xsl:value-of select="title"/>
          </div>
        </b>
          </li>
        </ol>
        <xsl:for-each select="p">
          <xsl:value-of select="text()"/>
        </xsl:for-each>
      </p>
      <xsl:for-each select="sec">
        <p>
          <ol>
            <li>
              <b>
                <div>
            <xsl:value-of select="title"/>
                </div>
              </b>
            </li>
          </ol>
          <xsl:value-of select="p"/>
        </p>
      </xsl:for-each>
    </xsl:for-each>
    </body>
    </html>
  </xsl:template>
  <xsl:template match="text()[parent::xref]"/>
</xsl:stylesheet>

我必须将此XML转换为EPub . 为了将其转换为Epub,我首先使用XSLCompiledTransform将其转换为html,然后将html转换为xhtml,然后使用Spire.doc,将此xhtml转换为Epub .

但是在将xhtml转换为Epub Spire.doc时会出现以下错误

命名空间'http://www.w3.org/1999/xhtml'中的元素'body'不能包含text.List可能的元素列表:'http://www.w3.org/1999/xhtml:p h1 h2 h3 h4 h5 h6 div ul ol dl pre hr blockquote ...

我没有得到我应该在xslt中做出什么改变才能解析“text()” .

1 回答

  • 0

    我认为你的样式表生成了无效的XHTML,因此第二阶段的处理(XHTML到Epub转换)就是拒绝它 . 识别此问题的第一步是查看您生成的XHTML .

    使用模式感知的XSLT可以使调试变得更加容易 - 它允许您在生成XHTML输出时对其进行验证,幸运的是,它将为您提供样式表中产生违规内容的位置 .

相关问题