2015-06-06 1 views
2

Я работаю над заменой узла xml. У меня проблема с удалением родительского узла с самим внутренним узлом.Как удалить родительский тег xml с помощью XML DOM javascript?

Я хочу удалить родительский узел с небольшим внутренним узлом и сохранить некоторые другие внутренние узлы.

Источник строки XML:

<root> 
***<bPoint id="1" > 
     <bLabel> 
      <text></text> 
     </bLabel> 
     <content src="p112" />*** 
     <bPoint id="2"> 
      <bLabel> 
       <text>xxx</text> 
      </bLabel> 
      <content src="p1123" /> 
     </bPoint> 
***</bPoint>*** 
    <bPoint id="bPoint-2" > 
     <bLabel> 
      <text>xxx</text> 
     </bLabel> 
      <content src="p1123" />   
    </bPoint> 
</root> 

Мой выход будет

<root> 
<bPoint id="2"> 
    <bLabel> 
     <text>xxx</text> 
    </bLabel> 
     <content src="p1123" /> 
</bPoint> 
<bPoint id="bPoint-2" > 
    <bLabel> 
     <text>xxx</text> 
    </bLabel> 
    <content src="p1123" />   
</bPoint> 
</root> 

Любой один помочь мне?

Заранее спасибо.

ответ

2

Вы можете использовать метод replaceChild на родительском узле узла, который хотите заменить.

так что вы хотели бы сделать replaceChild на корень мимоходом в вашем bPoint с идентификатором 2 в качестве первого аргумента и bPoint с идентификатором 1 в качестве второго

rootNode.replaceChild(bPoint2,bPoint1); 

Demo

var xml = '<?xml version="1.0" encoding="ISO-8859-1" ?><root><bPoint id="1"><bLabel><text></text></bLabel><content src="p112" /><bPoint id="2"><bLabel><text>xxx</text></bLabel><content src="p1123" /></bPoint></bPoint><bPoint id="bPoint-2" ><bLabel><text>xxx</text></bLabel><content src="p1123" /></bPoint></root>' 
 

 
//Create xml parser and parse to XMLDocument 
 
var parser = new DOMParser(); 
 
var xmldoc = parser.parseFromString(xml,"text/xml"); 
 

 
//Get "root" node 
 
var rootNode = xmldoc.querySelector("root"); 
 

 
//Would use id selectors but number ids are invalid selectors 
 
var bPoint1 = xmldoc.querySelector("bPoint"); 
 
var bPoint2 = bPoint1.querySelector("bPoint"); 
 

 
//Replace bPoint 1 with bPoint2 
 
rootNode.replaceChild(bPoint2,bPoint1); 
 

 
//Get the new xml string 
 
var newXml = (new XMLSerializer).serializeToString(xmldoc); 
 

 
console.log(xmldoc); 
 
document.body.innerText = newXml;

+0

Если у меня больше bPoint внутри, как заменить несколько bPoint на одну bPoint? – Vanarajan

+0

Вопрос был помечен узлом.js. Итак, какой пакет поддерживает «xmldoc.querySelector»? – Akkumulator