XSL 如何在没有 CDATA 标记的元素中呈现 html
XSL How to render html within element with no CDATA tag
我无法从 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 标签维护但不包括 ):
<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 包装。
非常感谢
作为第一步,您可以使用 <xsl:copy-of select="node()"/>
而不是 <xsl:value-of select="." />
,因为那样您将复制所有子节点。但是,我建议放置一个 <xsl:apply-templates/>
,然后确保还有其他模板,例如要复制的元素的身份转换模板:
<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>
这样,连同这个答案中的第一个模板,您应该会得到想要的输出。
我无法从 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 标签维护但不包括 ):
<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 包装。
非常感谢
作为第一步,您可以使用 <xsl:copy-of select="node()"/>
而不是 <xsl:value-of select="." />
,因为那样您将复制所有子节点。但是,我建议放置一个 <xsl:apply-templates/>
,然后确保还有其他模板,例如要复制的元素的身份转换模板:
<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>
这样,连同这个答案中的第一个模板,您应该会得到想要的输出。