Не добавлять пространство имен при использовании xml.setNamespace () - PullRequest
1 голос
/ 26 октября 2009

Всякий раз, когда я вызываю xml.setNamespace(ns), пространство имен элемента устанавливается на ns, но ns также добавляется как другое пространство имен со своим собственным префиксом к элементу. Я хотел бы знать, как предотвратить возникновение последнего (я в порядке с изменением XML.prototype.function::setNamespace) без определения @xmlns, поскольку я не могу использовать синтаксис E4X. В качестве альтернативы, XML.prototype.function::setAttribute, который не использует синтаксис E4X @attribute (за исключением, конечно, одного использования function:: для его определения), было бы еще лучше.

Пример:

var xhtml = new Namespace("http://www.w3.org/1999/xhtml"),
xml = <foo/>;
xml.setNamespace(xhtml);

// what I get:
xml.toXMLString() ===
  <foo
    xmlns:xhtml="http://www.w3.org/1999/xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
  />.toXMLString();

// what I want:
xml.toXMLString() ===
  <foo
    xmlns="http://www.w3.org/1999/xhtml"
  />.toXMLString();

Ответы [ 2 ]

0 голосов
/ 28 октября 2009

Я доволен только получением <xhtml:my-root xmlns:xhtml="...">...</xhtml:my-root>, поэтому я просто буду использовать именованное пространство имен (new Namespace(name, nsURI)).

0 голосов
/ 27 октября 2009

Я не знаю ответа, но я проверил ваш код через Rhino 1.7r2, и он дал разные результаты. Либо это зависит от реализации, либо одна из наших реализаций E4X содержит ошибки. не знаю, какой.

на носороге 1.7r2:

var xhtml = new Namespace("http://www.w3.org/1999/xhtml"),
xml = <foo/>;
xml.setNamespace(xhtml);

js> xml.toXMLString()
<e4x_0:foo xmlns:e4x_0="http://www.w3.org/1999/xhtml"/>

Похоже, вы столкнулись с извечной "префиксами пространства имен, которые должны быть незначительными, но в реальном мире они на самом деле являются существенной" проблемой. (

...