2016-06-28 6 views
-2

Ich vergleiche zwei XML-Strings, aber einige spezifische Attribut Element vor dem Vergleich zu löschen.Edit XML vor dem Vergleich mit einem anderen XML

Ich möchte <orderby> Attribut Element und alle Daten innerhalb dieser Tags

XML 1 entfernen:

<query> 
<selecttables> 
    <field> 
    <tablerscd>1014</tablerscd> 
    <tablename> OEM IHS Engines</tablename> 
    </field> 
    <orderby> 
    </orderby> 
</selecttables> 
</query> 

XML 2:

<query> 
<selecttables> 
    <field> 
    <tablerscd>1014</tablerscd> 
    <tablename> OEM IHS Engines</tablename> 
    </field> 
    <orderby> 
     <columnrscd>1228</columnrscd> 
     <columnrscd>1229</columnrscd> 
    </orderby> 
    </selecttables> 
</query> 

Meine Frage ist:

Wie kann ich <orderby> Attribut und alle Daten innerhalb dieser Tags entfernen, bevor ich sie vergleiche.

+0

Ihre XML ist ungültig. < selecttables> hat kein schließendes Tag. –

+0

@PhilB Ich kopierte bestimmten Teil und und XML-Gültigkeit ist nicht das Problem – Asim

+0

'' ist ein Element, kein Attribut. – Filburt

Antwort

1

ähnlich my own question about removing comments können Sie dies tun:

// load your Xml string into an XDocument 
var xml = XDocument.Parse(yourxmlstringhere); 

foreach (var node in xml.SelectNodes("//orderby").ToList()) 
{ 
    node.ParentNode.RemoveChild(node); 
} 

, die alle orderby Elemente finden, navigieren Sie zu ihrem übergeordneten Elemente und löschen Sie sie von dort aus.

Ich nahm diese Antwort von Anthony, die darauf hingewiesen, dass es sicherer ist, eine List vor dem Entfernen zu erstellen.

1

Sie können dies sehr trivialen LINQ to XML:

var doc = XDocument.Parse(xml); 

doc.Descendants("orderby").Remove(); 

Siehe this fiddle für eine Demo.