我见过Java和C#的问题/答案,但JavaScript没有。
如果我有一个带有标准prolog的XML文档/字符串,它将如何被访问?
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
由于prolog本身没有元素名称,据我所知,它不能被xml.getElementByTagName()
定位,因此无法删除序言的任何属性。
例如,如果我有一些看起来像这样的XML:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<element>text</element>
</root>
我可以定位<element>
并添加属性,删除文本等等。但是,假设我想要更改或删除独立声明。我无法用普通方法来定位它。
那么,如何使用JavaScript以编程方式更改序言?
答案 0 :(得分:2)
这适用于Firefox开发工具控制台:
// build an xml
var xmlDoc = document.implementation.createDocument(null, "books");
// print XML string
(new XMLSerializer()).serializeToString(xmlDoc);
只是根节点
"<books/>"
现在根据您的要求创建一个文档
var parser = new DOMParser();
prolog = '<?xml version="1.0" encoding="utf-8" standalone="no"?>';
// Add existing XML starting at root element
newXmlStr = prolog + (new XMLSerializer()).serializeToString(xmlDoc);
var xml = parser.parseFromString(newXmlStr, "application/xml");
// print raw xml
console.log((new XMLSerializer()).serializeToString(xml));
新XML字符串:
"<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<books/>"
其他情况:
prolog = '<?xml version="1.0" encoding="utf-8"?>';
prolog = '<?xml version="1.0" encoding="utf-8" standalone="yes"?>';
如果您的xml已包含prolog,请从带有xml.documentElement
prolog = '<?xml version="1.0" encoding="utf-8" standalone="yes"?>';
var parser = new DOMParser();
XmlStr = prolog + "<bookz/>";
var xmlz = parser.parseFromString(XmlStr, "application/xml");
console.log((new XMLSerializer()).serializeToString(xmlz));
带有standalone="yes"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<bookz/>
新XML:
// set standalone="no"
prolog = '<?xml version="1.0" encoding="utf-8" standalone="no"?>';
// serialize existing xml at root node
newXmlStr = prolog + (new XMLSerializer()).serializeToString(xmlz.documentElement);
// Rebuild with new prolog
var xml = parser.parseFromString(newXmlStr, "application/xml");
带有standalone="no"
console.log((new XMLSerializer()).serializeToString(xml));
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<bookz/>
答案 1 :(得分:0)
另一个可能的解决方案是简单地删除不利的序言,并使用str.replace()
将其替换为有利的序言。
如果不利的序言如下:
var badProlog = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'
有利的序言如下:
var goodProlog = '<?xml version="1.0" encoding="UTF-8"?>'
使用以下方法替换序言:
xmlStr.replace(badProlog, goodProlog)