“img”必须用匹配的结束标签终止。

7
当使用docx4j解析某个XSL XML文件时,我一直收到这个错误:'The element type "img" must be terminated by the matching end-tag </img>. Exception Error in Docx4JException'。我尝试了各种组合来解决这个问题,但似乎除了在标签之间放置一些文本之外,没有其他方法可以解决。我不想显示文本。还有其他办法吗?这是导致错误的XSL片段:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:prettyprint="http://xml.apache.org/xslt" xmlns:xalan="http://xml.apache.org/xalan" version="1.0">
   <xsl:output method="html" />
   <!-- Main entry template -->
   <xsl:template match="Email">
      <html>
         <body>
            <img width="100" height="100" src="http://thumbs.dreamstime.com/x/sun-logo-6350903.jpg" border="0" class="MyImage" />
            <div style="font-family:Verdana, Arial; font-size:9.5pt; font-weight:normal">
               <xsl:variable name="PTPTotalAmt" select="Issue_PTPTotalAmount_C" />
               <xsl:variable name="LetterDate" select="LetterDate" />
               <xsl:variable name="LtrDate" select="substring($LetterDate, 1, 11)" />
               <br>
                  <xsl:text />
               </br>
               <xsl:value-of select="Contact_Title_R" />
               <xsl:text />
               <xsl:value-of select="Contact_LastName_X" />
               <br>
                  <xsl:text />
               </br>
               <xsl:value-of select="Contact_DispAddrLine1_X" />
               <br>
                  <xsl:text />
               </br>
               <xsl:value-of select="Contact_DispAddrLine3_X" />
               <br>
                  <xsl:text />
               </br>
               <xsl:value-of select="Contact_DispAddrLine4_X" />
               <br>
                  <xsl:text />
               </br>
               <xsl:value-of select="Contact_DispAddrLine5_X" />
               <br>
                  <xsl:text />
               </br>
               <xsl:value-of select="Contact_DispAddrPostCode_X" />
               <br>
                  <xsl:text />
               </br>
               <xsl:text />
               <xsl:text />
               <xsl:value-of select="$LtrDate" />
            </div>
            <br>
               <xsl:text />
            </br>
            <br>
               <xsl:text />
            </br>
            <br>
               <xsl:text />
            </br>
            <br>
               <xsl:text />
            </br>
            <div style="font-family:Verdana, Arial; font-size:8.5pt; font-weight:normal">
               <br>
                  <xsl:text>Address Here</xsl:text>
               </br>
            </div>
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>
3个回答

5

将你的xsl:output元素改为输出XML:

<xsl:output method="xml" indent="yes"/>

(indent="yes" 部分不是必需的,但有助于阅读输出。)

如果仅更改 xsl:output method="xml" 不能解决问题,请尝试显式地关闭 img 元素。 因此,不要使用 <img/>,而是使用 <img></img>

<img width="100" height="100" src="http://thumbs.dreamstime.com/x/sun-logo-6350903.jpg" border="0" class="MyImage"></img>

解释: HTML对结束标签的处理方式比较随意。而后续使用docx4j进行处理时,需要正确的闭合元素。当你指定<xsl:output method="xml"/>时,XSLT将生成正确的闭合元素。


谢谢,但我已经尝试过了,结果仍然是相同的错误。 唯一有效的方法是在标签之间添加一些文本。 <img ....>无意义的文本</img>但是强制在图像标签之间放置文本似乎没有意义。 - snowstreams
1
啊,刚注意到你使用了 method="html"。请将其更改为 method="xml"。回答已更新。 - kjhughes
谢谢你。我以为可能在某个头文件中有些愚蠢的东西。 - snowstreams

3
如果你想添加图片并且经常出现闭合标签的提示,那么只需像这样编写代码:
<img src="abc"/>

1
这个有效!!只需像这样向Img标签添加闭合标签即可。
<img src=""/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接