gpt4 book ai didi

xslt - 强制 HTML Tidy 输出 XML(而不是 XHTML),或者强制 XSLTproc 解析 XHTML 文件

转载 作者:行者123 更新时间:2023-12-04 21:59:52 24 4
gpt4 key购买 nike

我有大量 HTML 文件需要用 XSLT 处理,使用 XML 文件来选择哪些 HTML 文件,以及我们要用它们做什么。

我试过:

  1. 使用 HTML Tidy 转换 HTML -> XHTML/XML
  2. 在 XSLT 中使用文档(文件名)来读取特定的 XHTML/XML 文件
  3. ...使用标准节点集命令访问例如“html/正文/*”

这行不通,因为:

  1. 似乎 XSLT(已尝试:libXSLT/xsltproc ... 和 Saxon)无法将 XHTML 文档作为外部文件处理(它看到 xhtml DOCTYPE,并拒绝将其作为节点进行解析)。

很好(我想)...XHTML 就是 XML,我只需要将它通过 HTML Tidy 并说:

“output-xml 是 ... output-html 否 ... output-xhtml 否”

...但是如果您尝试这样做,HTML Tidy 会忽略您,并强制使用 html :(。如果输入以 XML 开始,它似乎被硬编码为仅输出 XML 文件。

关于如何做到的任何想法:

  1. 强制 HTML Tidy 服从命令行参数,并设置我要求的文档类型
  2. 强制 XSLTproc 将 xhtml DOCTYPE 解析为 xml
  3. ...其他一些可行的巧妙方法?

注意:这必须在 OS X 上运行 - 它是 iOS 应用程序构建过程的一部分。这应该不是一个大问题,但是例如任何仅限 Windows 的工具都不可用。我想使用标准的开源跨平台工具(如 tidy、libxslt 等)来实现这一点

最佳答案

我终于发现了为什么 XSLTproc/Saxon 拒绝解析使用 DOCTYPE html 传入的文件:

The DOCTYPE of the external document alters how they interpret the xmlns (namespace) directive. Tidy was declaring (correctly) "xmlns=...the xhtml: namespace" - so all my node-names were ... I don't know: non-existent? ... inside my XSLT. XSLT was just ignoring them, as if they didn't exist - it needed me to provide a compatible mapping to the same namespace

...奇怪的是,如果 DOCTYPE 是 xml,那么他们会很高兴地忽略 xmlns 命令 - 或者他们允许我使用非限定名称引用节点。这让我误以为他们直截了本地忽略了 xhtml DOCTYPE 版本中的节点集。

所以,“解决方案”是这样的:

  1. 修改您的 XSLT 样式表以同时导入“xhtml”命名空间 - 注意:这是必需的,以便您可以引用外部文件中的节点
  2. 在每个节点(以及每个属性,我想?)上使用“xhtml”前缀编写所有 XSL 匹配/选择/模板规则
  3. 让 Tidy 输出它想要的任何东西:没关系,只要你有命名空间支持,它就会工作

示例代码:

  1. 您的样式表来自于:

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

    ...为此:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml">
  2. 您的选择/匹配/文档导入来自于此:

    <xsl:copy-of select="document('html-files/file1.htm')/html/body"/>

    ...为此:

    <xsl:copy-of select="document('html-files/file1.htm')/xhtml:html/xhtml:body"/>

注意:明确一点:如果您忽略命名空间,那么 XSLT 似乎可以处理未 DOCTYPED 的文件,即使它们中有命名空间。不要犯我犯的错误,认为你的 XSLT 是正确的,只是因为它看起来是 :)

关于xslt - 强制 HTML Tidy 输出 XML(而不是 XHTML),或者强制 XSLTproc 解析 XHTML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7301537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com