【问题标题】:Is there a way to transform xml in html without the need to follow the xml structure?有没有办法在不需要遵循xml结构的情况下在html中转换xml?
【发布时间】:2019-01-17 16:55:29
【问题描述】:

我需要将 xml 转换为 html。我正在使用 xsl 和 xsltproc 但注意到我需要知道 xml 结构才能为其生成正确的 html。我想创建对所有 xml 文档都应该通用的 xsl,无论它们的结构如何。 非常感谢任何想法。

我想要的只是,例如,在转换器看到 xml 标记 para 的任何地方,用 html 标记 p 和 par 的值替换它,而不考虑 xml 的结构。我需要 xml 的副本,但在 html 中。

【问题讨论】:

  • 您能否提供一个示例,说明您的期望以及您当前的方法有什么问题?
  • "只要转换器看到 xml 标签 para 用 html 标签 p 和 par 的值替换它,而不考虑 xml 的结构" - 这几乎是对 XSLT 模板规则如何工作的描述.

标签: html xml templates transform


【解决方案1】:

给定一个...的示例 XML

<?xml version="1.0"?>
<xml>
    <para rollno="392">
        <someValue>365 days</someValue>
    </para>
</xml>

我想要的只是,例如,在转换器看到 xml 标记 para 的任何地方,将其替换为 html 标记 p 和 par 的值,而不考虑 xml 的结构。

...您可以使用简单的模板将所有para 标记替换为p 标记。将这个/这些模板与身份模板结合起来,您可以独立于 XML 结构替换某些标签。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <!-- Create HTML prologue -->
  <xsl:template match="/*">
    <html>
      <body>
        <xsl:apply-templates select="node()|@*" />
      </body>
    </html>
  </xsl:template>

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

  <!-- Replace 'para' with 'p' -->
  <xsl:template match="para">
    <p>
      <xsl:apply-templates select="node()|@*" />
    </p>
  </xsl:template>

</xsl:stylesheet>

输出是:

<html>
  <body>
    <p rollno="392">
      <someValue>365 days</someValue>
    </p>
  </body>
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 2020-12-20
    • 2017-04-05
    • 1970-01-01
    相关资源
    最近更新 更多