2009-03-06 19 views
0

Hala xml ile geziniyorum.Sil XElement özniteliği temel alarak

<?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> 

300 Özellik düğümleri ihtiyacım yok çoğu, toplam vardır: Şimdi şöyle bir dosya var. Benim yapmak istediğim, id niteliği için belirtilen bir değere sahip olmayan tüm Öznitelik düğümlerini kaldırmasıdır. Yaklaşık 10 değer içeren bir dizi dizisi oluşturdum. Bu değerler, xml'de tutmak istediğim özellikleri temsil eder. Geri kalanını kaldırmak istiyorum.

Nedense
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 [email protected] = 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([email protected]) 
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) [email protected] = h).Remove() 
Next 
'save the xml 
doc.Save("C:\myXMLFile.xml") 

, benim kod çalışmaz:

Ne aşağıda kodu ile yapmaya çalışıyorum ben kullanmak istemiyorum bütün Özellik düğümleri kaldırarak xml değiştirmek olduğunu . İstenmeyen Attribute düğümlerinin hiçbiri kaldırılmaz.

Sorun nedir? String öznitelik değerleri dize dizimde herhangi bir sayıyla eşleşmeyen Öznitelik düğümlerini nasıl kaldırabilirim?

Şimdiden teşekkürler.

P.S. - Umarım problemimi tanımlarken kendimi net bir şekilde ifade ettim.

cevap

0

Boşver. Bunu anladım. Yaptığım İşte Ne:

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 [email protected] = 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([email protected]) 
End If 
Next 
0

Sürücülerden tüm istenmeyen düğümleri:

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); 
İlgili konular