shanky singh
shanky singh

Reputation: 1141

How to remove some particular tag from XML

I have one XML like below, and I want to remove Players tag when Flg = 1

<sports>
    <cricket Team = England>
        <Players Name = "EAA" Flg = "0"></Players>
        <Players Name = "EAB" Flg = "1"></Players>
    </cricket>
    <cricket Team = India>
        <Players Name = "IAA" Flg = "0"></Players>
        <Players Name = "IAB" Flg = "1"></Players>
    </cricket>
    <cricket Team = Aus>
        <Players Name = "AAA" Flg = "0"></Players>
        <Players Name = "AAB" Flg = "1"></Players>
    </cricket>
</sports>

So what I tried here is

var Players = xml.getElementsByTagName('Players');
var arr = Array.prototype.slice.call( Players  )
for(var i=0; i<arr.length; i++)
{
    var FlgAtt = arr[i].getAttribute('Flg');
    if(Flg == "1" ){
        arr.splice(i,1)
    }
}

But in the final XML those player tags are still available. My final output should be like

<sports>
    <cricket Team = England>
        <Players Name = "EAA" Flg = "0"></Players>
    </cricket>
    <cricket Team = India>
        <Players Name = "IAA" Flg = "0"></Players>
    </cricket>
    <cricket Team = Aus>
        <Players Name = "AAA" Flg = "0"></Players>
    </cricket>
</sports>

Can anybody tell me what I am doing wrong and how to solve these issues?

Upvotes: 3

Views: 4933

Answers (2)

vijay
vijay

Reputation: 926

Try this code in your local , it will remove the node and need to write the XmlDoc in your xml File finally.

xmlString = '<sports><cricket Team="England"><Players Name="EAA" Flg="0"></Players><Players Name="EAB" Flg="1"></Players></cricket><cricket Team="India"><Players Name="IAA" Flg="0"></Players><Players Name="IAB" Flg="1"></Players></cricket><cricket Team="Aus"><Players Name="AAA" Flg="0"></Players><Players Name="AAB" Flg="1"></Players></cricket></sports>'

var parser, xmlDoc;
parser = new DOMParser();
xmlDoc = parser.parseFromString(xmlString, "text/xml");
var tag = xmlDoc.getElementsByTagName("cricket");
for (x in tag) {
  for (y in tag[x].childNodes) {
    node = tag[x].childNodes[y];
    for (attr in node.attributes) {
      if ((node.attributes[attr].nodeName == "Flg") && (node.attributes[attr].nodeValue == "1"))
        node.remove();
    }
  }
}
console.log(xmlDoc);

Another way:

xmlString = '<sports><cricket Team="England"><Players Name="EAA" Flg="0"></Players><Players Name="EAB" Flg="1"></Players></cricket><cricket Team="India"><Players Name="IAA" Flg="0"></Players><Players Name="IAB" Flg="1"></Players></cricket><cricket Team="Aus"><Players Name="AAA" Flg="0"></Players><Players Name="AAB" Flg="1"></Players></cricket></sports>'

var parser, xmlDoc;
parser = new DOMParser();
xmlDoc = parser.parseFromString(xmlString, "text/xml");

var tag = xmlDoc.querySelectorAll("Players[Flg='1']");
var f=Array.from(tag);
f.forEach(x=>x.remove());

console.log(xmlDoc);

Upvotes: 0

Amadan
Amadan

Reputation: 198476

Assuming that's in document,

Array.from(document.querySelectorAll('Players[Flg="1"]')).forEach(
  x => x.parentNode.remove(x)
);

JavaScript's way of removing nodes from the document is parent.remove(child). As comments say, removing something from an array will not remove them from a document.

Upvotes: 4

Related Questions