如何对 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 只能有一个根标签,我的不能被称为有效,因为它有两个根标签:metadatadata。我想完全删除metadata 标签,因为我也没有任何用处。

我读到了 array.Shift() 命令,它删除了数组的第一个元素。但既然我有一个 XML,我该怎么做呢?同样,只是想删除 &lt;metadata&gt; 标记,所以结果 XML 看起来像这样(如下所示)。

<data>
<a>...</a>
<b>...</b>
<c>...</c>
</data>

【问题讨论】:

在开头添加&lt;root&gt;,在末尾添加&lt;/root&gt;,解析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() 的命令?的主要内容,如果未能解决你的问题,请参考以下文章

如何对 mailSettings 文件执行 XML 变量替换?

如何对字符串中的 XML 运行 XQuery?

如何转义xml中的特殊字符

如何在java中读取字符串xml字符串?

xpath中怎样用变量

如何从字符串获取 PKCS8 RSA 私钥/从 XML 获取 RSA 密钥对