【问题标题】:Generate HTML from XML using only XSD and no XSL仅使用 XSD 而非 XSL 从 XML 生成 HTML
【发布时间】:2014-10-10 22:39:23
【问题描述】:

我是开发新手,在此先向您道歉和感谢。 我有一个案例,我的 XML 和 XSD 文件中有:

xml:

<paragraph>
  My
    <a href="www.google.co.nz">Googlefoo</a>
  is not strong.
</paragraph>

xsd:

<xsd:element name="paragraph">
  <xsd:complexType mixed="true">
    <xsd:sequence>
      <xsd:element name="a"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

<xsd:element name="a">
  <xsd:complexType>
    <xsd:simpleContent>
      <xsd:extension base="xsd:string">
        <xsd:attribute name="href" type="xsd:anyURI"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
</xsd:element>

还有一个可能有用的 DTD。

<!ELEMENT paragraph        (#PCDATA | a )*>
<!ELEMENT a    (#PCDATA)>
<!ATTLIST a href CDATA  #REQUIRED>

这些文件托管在异地,我无法控制它们。它们用于站点内容生成。我可以通过 PHP 获取元素和属性并将它们拼接在一起,这样就可以使用现有的数据。然而,有没有办法将 XSD 应用到 XML 上,以便输出保持原样,即:混合内容,当拉出时看起来所有 HTML 都很高兴。

我相信 .XSD only 真正用于定义您可以验证的数据格式,或者可能是错误的。

我没有 .XSL,据我所知,XSLT 转换需要并且可以为我执行此操作。理想情况下,如果可以实现的话,这就是我想做的事情。

不确定我是否可以以某种方式将 CData 应用于元素然后对其进行解析。 我还没有找到动态生成 xsl 的方法。

任何指导或指向资源的指针都会很棒。橡皮鸭万岁。

【问题讨论】:

  • 很不清楚你在问什么。您可以将*.xsd(一种XML Schema)应用于XML 文档,然后,此过程称为验证。这是你想做的吗?还是您生成 HTML?如果是,怎么做?

标签: php html xml xslt xsd


【解决方案1】:

我是开发新手

没关系,我们都是从某个地方开始的。从阅读您的帖子来看,您似乎在混合技术并且不确定哪个是哪个。

还有一个可能有用的 DTD。
[...]它们用于站点内容生成

您的 DTD 以及 XSD 用于 XML 的验证。为此,您需要 a validating XML parser(用于 DTD)或 XSD processor。这些用于内容生成,模式充其量用于验证根据模式中的约定生成的内容是否正确。即,一个元素是否可以有子元素或只有文本内容。

我相信 .XSD 仅用于定义您可以验证的数据格式,或者可能是错误的。

这是正确的。

[...] 以便输出保持原样,即:混合内容,当拉出时看起来像 HTML 一样快乐。
[...] 我愿意没有 .XSL,据我所知,XSLT 转换需要并且可以为我做这件事。理想情况下,这是我想要的 如果可以的话就去做。

根据您想要实现的目标,XSLT 可能是一种可行的方法。这实际上取决于您使用的内容管理系统,这是针对桌面应用程序还是 Web 应用程序,它是否必须运行服务器端或客户端,这在您的情况下是否可行。如果你 Google for "xslt php introduction" 你会发现这样的教程 like this one 关于为网络生成内容。

要生成“HTML 快乐”的 XML,您需要指定必须将哪些元素转换为哪些 HTML 元素。即,您的 paragraph 可以翻译成 p 并且您的 a-元素可以保持原样。对于这些类型的任务,XSLT 是一个不错的选择。但同样,这是否可行取决于您的基础架构。

在工作中使用 XSLT 的自然方式通常是处理您的输入 XML 服务器端,然后按以下顺序进行:获取输入 XML -> 使用 XSD 处理器验证 XML -> 针对 XSLT 样式表运行 XML 作为输入 ->获取此转换的输出 -> 将此输出提供给最终用户(即网页、Web 应用程序、桌面应用程序)。

【讨论】:

  • 感谢您的宝贵时间。感谢反馈,我会研究这些教程。但基本上对我来说这里缺少的成分是 xslt 样式表。祝你有美好的一天:)。
  • @fable XSLT 是一种编程语言,你可以用它做任何事情。这在很大程度上取决于您的输入 XML 和您请求的输出如何对其进行编码。网上有很多教程甚至免费书籍,但如果您遇到困难,请随时提出关于 SO 的新问题 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-03
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
相关资源
最近更新 更多