【问题标题】:How to configure jsdom to preserve tag name case?如何配置 jsdom 以保留标签名称大小写?
【发布时间】:2014-01-01 00:34:55
【问题描述】:

看看这些行:

var doc = jsdom.jsdom("<moshe></moshe>");
console.log(doc.childNodes[0].tagName);

第二行以大写形式将“MOSHE”写入控制台,这意味着 jsdom 将我的字符串识别为 HTML 而不是 XML。如何强制 jsdom 保留标签名称的原始大小写?

提前致谢。

【问题讨论】:

  • 如果你需要解析XML,为什么不使用XML解析器呢?
  • 我不使用其他 XML 解析器 b/c 我需要通过由 jsdom 创建的主 HTML 文档采用解析器创建的节点,并将这些节点附加到主 HTML 层次结构中。使用另一个 XML 解析器会创建与 jsdom 不兼容的 XML 节点。另一方面,我想保留大小写,以便能够在这些节点上执行区​​分大小写的 xpath 表达式。

标签: jsdom


【解决方案1】:

根据 HTML 标准,tagName 在 HTML 文档中应该是大写的。

tagName 属性必须运行以下步骤:

  1. 如果上下文对象的命名空间前缀不为空,则将限定名称作为其命名空间前缀,后接“:”(U+003A),再接其本地名称。否则,将限定名称设为其本地名称。
  2. 如果上下文对象在 HTML 命名空间及其节点文档中 是一个 HTML 文档,让限定名称转换为 ASCII 大写。
  3. 返回限定名称。

Jsdom 目前(官方)不支持 XML 文档,因为 HTML 和 XML 文档在内部没有区别。

要在 v1.0+ 中解析为 XML,您必须提供 htmlparser2 作为解析器,然后 jsdom 暗示基于 &lt;?xml 指令解析为 XML。如果 #883 被合并,这可能变得不必要,在这种情况下,将引入 parsingMode 选项,它接受“xml”并切换到 xml 解析器。

最终,解决这个问题的工作正在进行中,但是用 jsdom 解析 XML 的直接解决方案还没有看到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 2011-03-30
    • 1970-01-01
    相关资源
    最近更新 更多