【问题标题】:How do I do a command like array.shift() to an XML string?如何对 XML 字符串执行类似 array.shift() 的命令?
【发布时间】: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来操作它(或者只提取你感兴趣的节点)。跨度>

标签: javascript xml


【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2021-03-16
      • 1970-01-01
      • 2017-09-18
      • 2016-09-25
      • 1970-01-01
      • 2011-09-08
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多