【问题标题】:XSL How to render html within element with no CDATA tagXSL 如何在没有 CDATA 标记的元素内呈现 html
【发布时间】:2015-04-27 11:15:33
【问题描述】:

我无法从我的 xml 中呈现 html 标记。它以文本形式出现。

XML:

 <object>
  <output_pid>uk-ac-man-scw:16844</output_pid>
  <output_title>Graphene: exploring carbon flatland</output_title>
  <output_type>Journal article</output_type>
  <output_state>open</output_state>
  <output_createddate>2009-09-25T13:54:34.538Z</output_createddate>
  <output_issueddate>2007</output_issueddate>
  <output_year>2007</output_year>
  <output_citation>A.K. Geim, A.H. MacDonald. (2007). Graphene: exploring carbon flatland. <em>Physics Today</em>, 60(8), 35-41.  eScholarID:<a class="escholarid"
        href="http://www.manchester.ac.uk/escholar/uk-ac-man-scw:16844">16844</a> | DOI:<a class="doi" href="http://dx.doi.org/10.1063/1.2774096">10.1063/1.2774096</a>
  </output_citation>
  <output_journal>Physics Today</output_journal>

XSL (1.0):

<xsl:for-each select="output_citation">
                        <xsl:sort select="//output_createddate"  data-type="text" order="descending"/> 

                        <li>                                
                            <xsl:value-of select="."  />                                   
                           </li>

                    </xsl:for-each>

输出是原始标签,而不是 html 格式:

<li>T. C. Lovejoy, Q. M. Ramasse, M. Falke, A. Kaeppel, R. Terborg, R. Zan, N. Dellby and O. L. Krivanek. (2012). Single atom
     identification by energy dispersive x-ray spectroscopy. Applied Physics Letters, 100(15), 154101.  eScholarID:213891 | DOI:10.1063/1.3701598

  </li>

这是我想要的输出 (基本上 output_citation 标记(不是 output_citation 标记)中的所有内容都带有 html 标记 mainatind 但不包括 ):

  <li>
     T. C. Lovejoy, Q. M. Ramasse, M. Falke, A. Kaeppel, R. Terborg, R. Zan, N. Dellby and O. L. Krivanek. (2012). Single atom
        identification by energy dispersive x-ray spectroscopy. <em>Applied Physics Letters</em>, 100(15), 154101.  eScholarID:<a class="escholarid" href="http://www.manchester.ac.uk/escholar/uk-ac-man-scw:213891">213891</a> | DOI:<a class="doi" href="http://dx.doi.org/10.1063/1.3701598">10.1063/1.3701598</a>               

  </li>

此外,disable-output-escaping 没有任何效果,因为没有 CDATA 包装。

非常感谢

【问题讨论】:

  • 我认为你需要调用&lt;xsl:apply-templates select="."/&gt;而不是&lt;xsl:value-of select="." /&gt;,并且你需要一个用于所有html标签的xsl复制模板。

标签: html xml xslt


【解决方案1】:

作为第一步,您可以使用&lt;xsl:copy-of select="node()"/&gt; 而不是&lt;xsl:value-of select="." /&gt;,这样您就可以复制所有子节点。但是,我建议放置一个&lt;xsl:apply-templates/&gt;,然后确保有其他模板,例如要复制的元素的身份转换模板:

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

根据您的需要,该模板可能只列出您要复制的元素。

并根据您想要的编辑

<xsl:template match="/">
  <xsl:apply-templates select="//output_citation"/>
</xsl:template>

<xsl:template match="output_citation">
  <li>
    <xsl:apply-templates/>
  </li>
</xsl:template>

这样,连同这个答案中的第一个模板,你应该得到你想要的输出。

【讨论】:

  • 它确实输出了所有元素,但我只想要一个 。我如何让它只输出这个元素?谢谢
  • 到目前为止显示的代码表明您希望将每个output_citation 转换为li 元素,然后希望在li 中输出output_citation 的内容。我的建议会实现这一点。您需要编辑显示上下文的问题,包括 XML 输入示例以及 XSLT 和所需结果。
  • 好的,我已经在我的原始帖子中编辑了 XML。基本上我想将 output_citation 内容转换为 li 并排除所有其他元素和 output_citation 标签。非常感谢
  • @kevmull 那么您想要的 exact 输出是什么?请编辑您的问题并澄清这一点。
  • @kevmull 如果您按照此答案给出的说明进行操作,这就是您将获得的输出。另请阅读上面第二条评论的结尾。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-02
  • 2019-08-13
  • 2017-01-06
  • 2010-10-08
  • 1970-01-01
  • 2013-09-29
  • 2020-01-28
相关资源
最近更新 更多