gpt4 book ai didi

javascript - 如何在没有 xmlns 属性的情况下序列化 XML?

转载 作者:行者123 更新时间:2023-11-29 23:28:05 24 4
gpt4 key购买 nike

我的代码是在 Scala.js 中,但我认为从 JavaScript 的 Angular 来看,它的要点应该很容易理解:

  def htmlToXHTML(input: String)
(implicit parser: DOMParser, serializer: XMLSerializer): String = {
val doc = parser.parseFromString(input, "text/html")
val body = getElementByXpath("/html/body", doc).singleNodeValue
val bodyXmlString = serializer.serializeToString(body)
val xmldoc = parser.parseFromString(bodyXmlString, "application/xml")
val xmlDocElems: NodeList = xmldoc.getElementsByTagName("*")
xmlDocElems.foreach{
case elem: Element =>
elem.removeAttribute("xmlns")
println(s"Found element $elem with html: ${elem.outerHTML}")
case node => println(s"Warning: found unexpected non-element node: $node.")
}
xmldoc.firstElementChild.innerHTML
}

这在上面使用过,因此为了完整性而将其包括在内( https://stackoverflow.com/a/14284815/3096687 ):

  def getElementByXpath(xpath: String, doc: Document): XPathResult =
doc.evaluate(
xpath, doc, null.asInstanceOf[XPathNSResolver],
XPathResult.FIRST_ORDERED_NODE_TYPE, null
)

简而言之,此函数读取 HTML 字符串,将其转换为 HTML 文档,序列化为 XML,重新解析为 XML,然后查找文档中的所有元素并循环遍历它们 (foreach) ,然后删除 xmlns 属性。然而,生成的innerHTML似乎仍然在元素上具有xmlns属性,即使第一个println(又名console.log)指示我们找到了有问题的元素,但没有删除 xmlns 属性。

问题可能源自default values在 DTD 中指定:

If a default value for the attribute is defined in a DTD, a new attribute immediately appears with the default value

最佳答案

我可能会作弊并从结果字符串中删除 xmlns,因为它是 huge pain使元素失去其 namespace 。

如果您坚持这样做,您可以尝试在遍历原始 DOM 时从头开始构建文档 - 迂腐地复制除命名空间之外的所有内容(即使用具有空命名空间的 createElementNS?)

关于javascript - 如何在没有 xmlns 属性的情况下序列化 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48343468/

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