转换后复制xml标记

时间:2014-04-25 09:43:44

标签: xml xslt

我正在尝试将具有my xll的转换应用于我的xml文件。

这是我的xml。

<?xml version="1.0" encoding="UTF-8"?>
<messages>
  <message>
    <from>Pepe (Tim@example.com)</from>
    <to>Juan (John@example.com)</to>
    <datetime>28/02/2011 17:48:23,61</datetime>
    <text>¿Hello, Johnn, what's up?</text>
  </message>
  <message>
    <from>Juan (Tim@example.com)</from>
    <to>Pepe (john@example.com)</to>
    <datetime>28/02/2011 17:54:20,87</datetime>
    <text>Here, learning <strong>XML</strong></text>
  </message>
</messages>

这是我的xsl代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:template match="/">
    <html>
      <body>
        <xsl:for-each select="messages/message">
          <from>
              <xsl:value-of select="from"/>
          </from>
          <to>
              <xsl:value-of select="to"/>
          </to>
          <text>
              <xsl:value-of select="text"/>
              <strong>
                <xsl:value-of select="text/strong"/>
              </strong>
          </text>
        </xsl:for-each>
      </body>    
    </html>
  </xsl:template>
</xsl:stylesheet>

除非<text><strong></strong></text>,否则一切都很完美。 当我进行XML转换得到这个错误的结果时,问题出现了:

<text>Here, learning XML<strong>XML</strong></texto>

出于任何原因,我从<strong>标签中复制了XML,我不知道错误在哪里。

感谢您的建议。

2 个答案:

答案 0 :(得分:1)

而且,更好的是:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
    <html>
        <body>
            <xsl:for-each select="messages/message">
                <xsl:copy-of select="from"/>
                <xsl:copy-of select="to"/>
                <xsl:copy-of select="text"/>
            </xsl:for-each>
        </body>    
    </html>
</xsl:template>

答案 1 :(得分:0)

xsl:value-of为您提供给定节点的字符串值,即给定节点下的所有文本节点。这就是为什么你看到“XML”文本重复的原因 - 它是<text><strong>的字符串值的一部分。