用javascript改变现有的xml prolog

时间:2018-04-30 23:31:26

标签: javascript xml

我见过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以编程方式更改序言?

2 个答案:

答案 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
<?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"

的XML
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)