为什么我从其他标签获得输出? XML / XSLT

时间:2013-08-28 08:31:42

标签: xml xslt-1.0

我正在使用XSLT 1.0将XML转换为HTML,但是我得到了不需要的输出。为什么我在评论信息中收到“data.flow2”

XML文件:

<?xml version="1.0" encoding="utf-8" ?>
<CommentsList>
  <Comment>
    <CommentBy>data.flow2</CommentBy>
    <CommentMsg>Set Under Study</CommentMsg>

  </Comment>
  <Comment>
    <CommentBy>data.flow2</CommentBy>
    <CommentMsg>True Files</CommentMsg>

  </Comment>
  <Comment>
    <CommentBy>data.flow2</CommentBy>
    <CommentMsg>
      <![CDATA[<a     href='http://eservices.saudieng.sa/Attachments/DataFlowReports/ce2cd49ac33e45edb8902c7d074d    908a.pdf'>Download the Report</a>]]> </CommentMsg>

  </Comment>
</CommentsList>

这是xslt:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

  <xsl:template match="/">
    <html>
      <body>
        <xsl:apply-templates/>
      </body>
    </html>
 </xsl:template>

    <xsl:template match="CommentsList">
      <table border="1">
        <tr style="background-color:lightblue">
          <td>Comment By</td>
          <td>Comment Msg</td>
          <td>Comment Date</td>
        </tr>
        <xsl:for-each select="/CommentsList/Comment">
          <tr>
            <td>
              <xsl:value-of select="CommentBy"/>
            </td>
            <xsl:choose>
              <xsl:when test="/CommentsList/Comment[3]/CommentMsg">
                <td>
                  <CommentMsg>
                    <xsl:copy-of select="@*"/>
                    <xsl:value-of select="." disable-output-escaping="yes"/>
                  </CommentMsg>
                </td>
              </xsl:when>
              <xsl:otherwise>
                <td>
                  <xsl:apply-templates select="."/>
                  <xsl:value-of select="text()"/>
                </td>
             </xsl:otherwise>
            </xsl:choose>


          </tr>
        </xsl:for-each>
      </table>
    </xsl:template>

</xsl:stylesheet>

评论msg的输出如下:

data.flow2 [评论消息文本]

为什么我没有收到评论消息文本?

提前致谢:)

1 个答案:

答案 0 :(得分:0)

因为您在上下文节点为value-of select="."时正在执行Comment。元素的字符串值被定义为其所有后代文本节点的串联,因此对于Comment,这将是CommentByCommentMsg元素内容的串联。

改为使用select="CommentMsg"