使用 JavaScript 删除 XML 命名空间的简单方法?

Posted

技术标签:

【中文标题】使用 JavaScript 删除 XML 命名空间的简单方法?【英文标题】:Easy way to drop XML Namespaces with JavaScript? 【发布时间】:2011-04-11 21:26:24 【问题描述】:

是否有一种简单的方法,例如,删除 XML 名称空间,但使用 jQuery 或 javascript 保持标签不变?例如:

<html:a href="#an-example" title="Go to the example">Just an Example</html:a>

并将其更改为:

<a href="#an-example" title="Go to the example">Just an Example</a>

在使用 jQuery 或 JavaScript 时不知道其中的元素和/或属性?

【问题讨论】:

明确地说,我认为这是在作为 text/html 服务之后,因此被解析为 HTML 而不是 XHTML 是否正确。在这种情况下,这不是关于 XML 或命名空间的问题,而是关于通过删除名称前面的字符并包含冒号来将元素从一个节点名称转换为另一个节点名称的问题? 是的。该文件以 HTML 而非 XHTML 的形式提供(它的 DOCTYPE 为 ),而且,从技术上讲,是的,它不是 XML 命名空间,但我认为可能有一种方法可以将 HTML 解析为 XML 以剥离排除 XML 命名空间是因为 $('html:a') 或带有 html:a 的 getElementByTagName 返回无法识别的表达式。 【参考方案1】:

这不是一个真正的答案,但你最好处理这个服务器端。对于此类任务,JavaScript 出现得太晚了...事件可能已经附加到现有节点,并且您将处理每个元素两次。

命名空间的用途是什么?

如果这些是静态 html 文件并且命名空间不起作用,我将使用正则表达式去除所有命名空间。

如果它们不是静态的,并且命名空间在用作 xml 时有目的,您可以进行一些服务器端检测以使用正确的文档类型和命名空间(在适当的时候)。

【讨论】:

不幸的是,对于这个特定的项目,我无法在服务器端进行。【参考方案2】:

当您知道如何时,这很容易......只需使用 \\ 来转义冒号,这样它就不会被 jquery 解析引擎解析为操作分隔符。

$('html\\:a').each( function()
  var temp = $(this).html();
  $(this).replaceWith("<a>"+temp+"</a>");
);

这应该在每个元素之间进行迭代,并用普通标签替换它们。由于这些都被提供给一个 ajax 回调函数,否则我不明白你为什么要即时执行它......那么第一行将更改为:

$.post('...',, function(dat)
    $(dat).find('html\\:a').each( blah blah ....
    .
    .
);

注意,我是那些只在 FF 中真正测试事物的可怕人之一......

【讨论】:

谢谢,但主要是我希望它这样做,但还要添加参数...?【参考方案3】:

如果要替换的代码中没有&lt;script&gt;标签可以试试(demo)

container.innerHTML = container.innerHTML
                               .replace(/<(\/?)([^:>\s]*:)?([^>]+)>/g, "<$1$3>")

【讨论】:

棒极了,这正是我所需要的! 这对我来说失败了这个 XML &lt;s:Envelope xmlns:s="http://test.org"&gt;&lt;s:Body&gt;&lt;ExecuteResponse xmlns="http://test.org"&gt;&lt;/ExecuteResponse&gt;&lt;/s:Body&gt;&lt;/s:Envelope&gt; 它看起来像 http: 混淆它并返回这个:&lt;Envelope xmlns:s="http://test.org"&gt;&lt;Body&gt;&lt;//test.org"&gt;&lt;/ExecuteResponse&gt;&lt;/Body&gt;&lt;/Envelope&gt;

以上是关于使用 JavaScript 删除 XML 命名空间的简单方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中删除 XML 命名空间

使用 PHP 从 XML 中删除命名空间

从 WCF RESTful 响应中删除 xml 命名空间

如何使用 java dom 从 xml 中删除命名空间?

如何从杰克逊 XML 解析中删除命名空间定义

命名空间删除xml