Frage

Ich spiele immer noch mit xml um. Jetzt habe ich eine Datei, die wie folgt aussieht:

<?xml version="1.0" encoding="utf-8"?>
<Attributes>
 <AttributeSet id="10110">
  <Attribute id="1">some text here</Attribute>
  <Attribute id="2">some text here</Attribute>
  <!-- 298 more Attribute nodes follow -->
  <!-- note that the value for the id attribute is numbered consecutively -->
 </AttributeSet>
</Attributes>

Es gibt 300 Attributknoten insgesamt, von denen die meisten brauche ich nicht. Was ich möchte, zu tun ist, alle Attribute Knoten zu entfernen, die nicht einen bestimmten Wert für das id-Attribut haben. Ich habe ein String-Array mit etwa 10-Werte festgelegt. Diese Werte stellen die Attribute, die Ich mag würde im xml zu halten. Der Rest Ich möchte entfernen.

Was ich versuche unten mit dem Code zu tun, ist die XML ändern, indem alle Attribute Knoten zu entfernen, die ich will nicht verwenden:

Dim ss() As String = New String() {"39", "41", "38", "111", "148", "222", "256", "270", "283", "284"} 'keep the Attributes whose id value is one of these numbers
Dim rv As New List(Of String)'will hold Attribute ids to remove
Dim bool As Boolean = False
For Each x As XElement In doc...<eb:Attribute>
 For Each s As String In ss
  If x.@id = s Then
   bool = True
   Exit For
  End If
 Next
 If bool = True Then
  'do nothing
 Else 'no attribute matched any of the attribute ids listed mark xelement for removal
  rv.Add(x.@id)
 End If
Next
'now remove the xelement
For Each tr As String In rv
 Dim h As String = tr
 doc...<eb:Attribute>.Where(Function(g) g.@id = h).Remove()
Next
'save the xml
doc.Save("C:\myXMLFile.xml")

Aus irgendeinem Grund mein Code funktioniert nicht. Keiner der unerwünschten Attribute Knoten entfernt werden.

Was ist das Problem? Wie kann ich die Attributknoten, deren id-Attribut Werte entfernen keine Nummer in meinem String-Array übereinstimmen?

Vielen Dank im Voraus.

P. S. - Ich hoffe, dass ich mich klar mein Problem bei der Beschreibung

.
War es hilfreich?

Lösung

Es macht nichts. Ich habe es herausgefunden. Hier ist, was ich getan habe:

For Each x As XElement In doc...<eb:Attribute>
 **bool = False 'I simply added this line of code and everything worked perfectly**
 For Each s As String In ss
  If x.@id = s Then
   bool = True
   Exit For
  End If
 Next
 If bool = True Then
  'do nothing
 Else 'no attribute matched any of the attribute ids listed so remove the xelement
  rv.Add(x.@id)
 End If
Next

Andere Tipps

Entfernen Sie alle unerwünschten Knoten:

XDocument xDoc = XDocument.Load(xmlFilename);

List<string> keepList = new List<string> { "1", "2", "3" };

var unwanted = from element in xDoc.Elements("Attributes").Elements("AttributeSet").Elements("Attribute")
               where !keepList.Contains((string)element.Attribute("id"))
               select element;

unwanted.Remove();

xDoc.Save(xmlFilename);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top