如何使用javascript正则表达式改变xml结构

How to use javascript regular expression to change xml structure?

本文关键字:xml 结构 改变 正则表达式 何使用 javascript      更新时间:2023-09-26

谁能告诉我如何使用JavaScript正则表达式来改变以下xml结构?

默认xml

    <dict>
    <key>TITLE</key>
    <string>first</string>
    <key>URL</key>
    <string>http://someurl.com/1.m3u8</string>
    </dict>
    <dict>
    <key>TITLE</key>
    <string>Second</string>
    <key>URL</key>
    <string>http://someurl.com/2.m3u8</string>
    </dict>
    <dict>
    <key>TITLE</key>
    <string>Third</string>
    <key>URL</key>
    <string>http://someurl.com/3.m3u8</string>
    </dict>

转换为:

    <dict>
    <url>http://someurl.com/1.m3u8</url>
    <title>First</title>
    </dict>
    <dict>
    <url>http://someurl.com/2.m3u8</url>
    <title>Second</title>
    </dict>
    <dict>
    <url>http://someurl.com/3.m3u8</url>
    <title>Third</title>
    </dict>

编辑:我想用这个代码解析转换后的xml:

<button type="button" onclick="loadXMLDoc()">crate table</button>
<br><br>
<table id="demo"></table>
<script>
function loadXMLDoc() {
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      myFunction(this);
    }
  };
  xmlhttp.open("GET", "myxml.xml", true);
  xmlhttp.send();
}
function myFunction(xml) {
  var i;
  var xmlDoc = xml.responseXML;
  var table="<tr><th>URL</th><th>Title</th></tr>";
  var x = xmlDoc.getElementsByTagName("dict");
  for (i = 0; i <x.length; i++) { 
    table += "<tr><td>" +
    x[i].getElementsByTagName("url")[0].childNodes[0].nodeValue +
    "</td><td>" +
    x[i].getElementsByTagName("title")[0].childNodes[0].nodeValue +
    "</td></tr>";
  }
  document.getElementById("demo").innerHTML = table;
}
</script>

您可以通过捕获组来做到这一点。然而,在一个正则表达式中做到这一点是非常困难的,所以让我们使用两个正则表达式。

当与替换字符串<title>$1</title>:

一起使用时,以下正则表达式(其中.+?是实际标题)将插入适当的标题:
<title>TITLE<'/title>'n<string>(.+?)<'/string>

然后,使用下面的正则表达式和替换字符串<url>$1</url>来插入合适的URL(其中https?:'/'/'S+?是URL):

<key>URL<'/key>'n<string>(https?:'/'/'S+?)</string>

注意:事实上,你想做的是可以用regex做不是意味着这是一个好主意解析任意XML与它。