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

时间:2014-01-30 05:42:37

标签: c# xml xslt xslt-1.0 spire.doc

我在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。期望的可能元素的列表:   'http://www.w3.org/1999/xhtml:p h1 h2 h3 h4 h5 h6 div ul ol dl pre hr   BLOCKQUOTE ...

为了解析“text()”,我无法准确地在xslt中进行哪些更改。

1 个答案:

答案 0 :(得分:0)

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

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