سؤال

أنا لا تزال تلعب حولها مع xml.الآن لدي ملف تبدو مثل هذا:

<?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 سمة العقد الكلي, التي لا تحتاج.ما أود القيام به هو إزالة كل سمة العقد أن لا يكون محدد القيمة سمة معرف.يجب إنشاء صفيف سلسلة مع حوالي 10 القيم.هذه القيم تمثل السمات التي أود أن نضع في xml.بقية كنت ترغب في إزالة.

ما أحاول القيام به مع رمز أدناه تعديل xml عن طريق إزالة جميع سمة العقد التي لا ترغب في استخدام:

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")

لسبب ما لم يعمل الكود الخاص بي.أي من غير سمة يتم إزالة العقد.

ما هي المشكلة ؟ كيف يمكنني إزالة السمة العقد الذي سمة معرف القيم لا تتطابق مع أي رقم في سلسلة المصفوفة ؟

شكرا مقدما.

P. S.- أتمنى أكون واضحا في وصف مشكلتي.

هل كانت مفيدة؟

المحلول

لا بأس. اكتشفتها. هنا ما فعلته:

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

نصائح أخرى

إزالة غير المرغوب فيه جميع العقد:

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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top