迭代XML节点并更改属性

时间:2018-01-11 16:24:27

标签: javascript jquery xml

我有一个大的xml文件,其结构如下:

<items>
    <item>
        <a>id1</a>
        <b>foo</b>
        <c>1</c>
        <d>1</d>
        <e></e>
    </item>
    <item>
        <a>id2</a>
        <b>bar</b>
        <c>1</c>
        <d>1</d>
        <e>3</e>
    </item>
    <item>
        <a>id3</a>
        <b>fum</b>
        <c>1</c>
        <d>1</d>
        <e></e>
    </item>
</items>

我想设置e的值,其值取决于a的值。因此,如果item包含属性id1的值a,则e应设置为123,如果属性a为{ {1}}将其设置为id2等。

使用脚本语言很容易。我在Chrome浏览器的开发工具中尝试使用JavaScript(jQuery),但我只能读取值但不能将其写回。也许我太累了...... 如果你们中的任何人都可以帮助我选择哪种脚本语言(最好不需要安装任何东西),我会很高兴的!

这是我到目前为止使用的小片段:

456

1 个答案:

答案 0 :(得分:1)

您可以从xml文档中获取每个a元素和每个e元素,遍历所有a元素并使用switch statement添加textContente元素。

&#13;
&#13;
var str = "<items><item><a>id1</a><b>foo</b><c>1</c><d>1</d><e></e></item><item><a>id2</a><b>bar</b><c>1</c><d>1</d><e>3</e></item><item><a>id3</a><b>fum</b><c>1</c><d>1</d><e></e></item></items>";

var xmlDoc = $.parseXML(str);
var $xml = $(xmlDoc);
var $a = $xml.find('a');		// find all a elements
var $e = $xml.find('e');		// find all e elements

console.log("xml string before: " + str);

for (var i = 0; i < $a.length; i++) {
    switch ($a[i].textContent) {
     case "id1":
  	 $e[i].textContent = 123;
      break;
    case "id2":
    	$e[i].textContent = 456;
      break;
    default:
    	break;
  }
}

function xmlToString(xmlData) { 

    var xmlString;
    //IE
    if (window.ActiveXObject){
        xmlString = xmlData.xml;
    }
    // code for Mozilla, Firefox, Opera, etc.
    else{
        xmlString = (new XMLSerializer()).serializeToString(xmlData);
    }
    return xmlString;
}

console.log("xml string after: " + xmlToString(xmlDoc));
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

将xml转换为字符串,以便在控制台中可见。从here获得了这个功能。