3

我需要在 JavaScript 中创建一些区分大小写的 XML 节点,它们的属性名称之间有一个冒号。

例子:<Data ss:Type="String">Contact Name</Data>

当我尝试通过 JavaScript 使用该createElement()函数创建一个元素时,它会以小写形式创建它。此外,添加带有冒号的属性也有很多问题。例如:ss:Type="String"

这是Excel数据,我将源.xml文件保存回.xls文件。XML 元素和属性的大小写对于 Excel 能够读取文件非常重要。

任何示例或指针都会有很大帮助。

4

3 回答 3

7

您正在寻找的 JavaScript 方法是document.createElementNSelm.setAttributeNS

var e = document.createElementNS('http://www.microsoft.com/office/excel/', 'Data');
e.setAttributeNS('http://www.microsoft.com/office/excel/', 'ss:Type', 'String');
e.textContent = 'Contact Name';

然后,如果您想取回字符串,.innerHTML将不再起作用,因此您必须使用XMLSerializer

var s = new XMLSerializer();
s.serializeToString(e);
于 2012-12-03T12:33:23.500 回答
1

Paul S.的回答让我找到了解决方案。

我创建了所需的 XML DOM 元素,createElement()并添加了所需的属性setAttribute()。这导致:

<data ss:type="String">Contact Name</data>

请注意,此示例中的元素和属性名称都是小写的。但是,我真正想要的是Pascal 案例

<Data ss:Type="String">Contact Name</Data>

XMLSerializer()在按照 Paul S. 的建议首先将 XML DOM 转换为字符串之后,我然后简单replace()地将所有出现的<datato<Datass:typeto转换为ss:Type.

我的问题的解决方案是 XMLSerializer() 和 String replace() 函数

于 2012-12-05T08:30:52.743 回答
1

这是一个过时的问题,但我会给出我的答案:
当使用window.document创建元素时,您使用的是HTMLDocument(使用 ns="http://www.w3.org/1999/xhtml"),并且使用它创建的节点响应 html 标准与您所经历的限制。
您应该使用 aDocument来处理通用 XML。

// instantiate a new Document  
var xml_doc = document.implementation.createDocument('optional_namespace','rootElement');  

//  then your code to create element  
var e = xml_doc.createElementNS('http://www.microsoft.com/office/excel/', 'Data');  
e.setAttributeNS('http://www.microsoft.com/office/excel/', 'ss:Type', 'String');  
e.textContent = 'Contact Name';  

// probably append it  
xml_doc.documentElement.appendChild(e);  

// serialized xml_doc:  
var s = new XMLSerializer();  
s.serializeToString(xml_doc);  

/*
<rootElement xmlns="optional_namespace">
  <Data xmlns="http://www.microsoft.com/office/excel/" xmlns:ss="http://www.microsoft.com/office/excel/" ss:Type="String">Contact Name</Data>
</rootElement>"
*/

编辑:在 Chrome 和 FF 中测试

于 2016-02-18T16:43:55.020 回答