如何对 XML 字符串执行类似 array.shift() 的命令?
Posted
技术标签:
【中文标题】如何对 XML 字符串执行类似 array.shift() 的命令?【英文标题】:How do I do a command like array.shift() to an XML string? 【发布时间】:2022-01-05 14:59:34 【问题描述】:我有一个这样的 XML 存储在 javascript 中的字符串变量中:
<metadata>
<a>...</a>
<b>...</b>
<c>...</c>
</metadata>
<data>
<a>...</a>
<b>...</b>
<c>...</c>
</data>
由于一个有效的 XML 只能有一个根标签,我的不能被称为有效,因为它有两个根标签:metadata
和 data
。我想完全删除metadata
标签,因为我也没有任何用处。
我读到了 array.Shift() 命令,它删除了数组的第一个元素。但既然我有一个 XML,我该怎么做呢?同样,只是想删除 <metadata>
标记,所以结果 XML 看起来像这样(如下所示)。
<data>
<a>...</a>
<b>...</b>
<c>...</c>
</data>
【问题讨论】:
在开头添加<root>
,在末尾添加</root>
,解析XML,然后使用返回的DOM来操作它(或者只提取你感兴趣的节点)。跨度>
【参考方案1】:
使用DOMParser
const xmlString = `
<metadata>
<a>...</a>
<b>...</b>
<c>...</c>
</metadata>
<data>
<a>...</a>
<b>...</b>
<c>...</c>
</data>`;
const parser = new DOMParser();
const doc1 = parser.parseFromString(`<root>$xmlString</root>`, "application/xml");
doc1.querySelector('metadata').remove()
console.log(doc1.documentElement.innerhtml)
【讨论】:
【参考方案2】:既然你说的是字符串,那么只要搜索'',得到从那个位置到结尾的子字符串:
let str = `
<metadata>
<a>...</a>
<b>...</b>
<c>...</c>
</metadata>
<data>
<a>...</a>
<b>...</b>
<c>...</c>
</data>
`
let data = str.substring(str.search('<data>'))
console.log(data)
或者搜索''加上两个换行符来查找:
let data = str.substring(str.search('</metadata>\n\n') + 13)
【讨论】:
以上是关于如何对 XML 字符串执行类似 array.shift() 的命令?的主要内容,如果未能解决你的问题,请参考以下文章