【问题标题】:Generation of XSLT From XML从 XML 生成 XSLT
【发布时间】:2018-05-15 07:14:50
【问题描述】:

我有一个内容非常大的 XML 文件。 我有那个 xml 文件的 xsd 文件。

例如:请访问此链接

XML 内容:http://formalmind.com/sites/default/files/blog/manual-testing.reqif

XSD 对于那个 XML:https://www.omg.org/spec/ReqIF/20110401/reqif.xsd

我需要在 HTML 页面中显示该 xml。为此,我需要 XSLT。

是否可以为给定的 XML 自动生成 XSLT?或者有没有其他方式可以在html页面中显示?

Html 结果应该是这样的

HTML_OUTPUT_IMAGE

谢谢 西瓦巴拉克里希南

【问题讨论】:

  • XML 示例文档和 XSD 模式都没有定义一种特定的 HTML 格式来表示此类示例,因此不清楚为什么您希望能够生成自动创建 HTML 的 XSLT 样式表。您需要有一个您希望 XML 映射到的特定 HTML 格式的模式,然后您可以使用 Altova MapForce(尽管我从未使用过该工具)。但一般来说,使用 XSLT 将一些 XML 转换为一些 HTML 的任务包括首先选择/创建所需的 HTML,然后使用 XSLT 模板规则实现 XML 到 HTML 的映射。
  • 感谢@Martin Honnen 我已经编辑了我的问题,请重新访问并给出一个想法

标签: html xml xslt


【解决方案1】:

是的,这是可能的,但尚不清楚这是一种有用的方法。您打算使用模式中的哪些信息来生成 XSLT?您需要提供一些在架构中找到的构造示例,以及您想要生成的结果 XSLT 规则。

您应该考虑其他两个选项:

(a) 编写一个完全通用的 XSLT 样式表,它可以处理任何文档,而不管其模式如何。例如,它可能包含这样的规则:

<xsl:template match="*[count(*)>1 and count(*)=count(distinct-values(*/node-name())]">
  <table>
    <xsl:for-each select="*">
      <tr>
        <td><xsl:value-of select="name()"/></td>
        <td><xsl:apply-templates/></td>
      </tr>
    </xsl:for-each>
  </table>
</xsl:template>

这条规则说,如果你遇到一个元素有 2 个或多个子元素,并且所有子元素都有不同的名称,则显示一个表格,其中一列中包含元素名称,另一列中包含它们的值。

(b) 编写一个通用的模式感知 (XSLT 2.0) 样式表来处理任何输入文档,但使用来自已验证节点上的类型注释的模式信息来决定要生成什么输出。例如,您可能有这样的规则:

<xsl:template match="@*[data(.) instance of xs:decimal]">
   <xsl:value-of select="format-number(., '#,00', 'continental')"/>
</xsl:template> 

这会导致所有十进制属性值使用3,14 等格式显示。

【讨论】:

  • 谢谢@Michael Kay,我已经编辑了我的问题,请重新访问并给出一个想法
  • 你仍然没有给出关于你想要什么样的 HTML 再现的线索。
  • 我为我正在寻找的 html 图像添加了一个链接!谢谢@Michael Kay
  • 我认为任何类型的自动化都不会为您提供这种再现。您需要硬着头皮写一些 XSLT 代码。
猜你喜欢
  • 2014-08-17
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 2021-03-21
  • 2017-12-16
  • 2017-12-29
相关资源
最近更新 更多