ما الأفضل:إلغاء التسلسل إلى كائن مقابل Xpathing فقط مقابل مستند XML؟

StackOverflow https://stackoverflow.com/questions/1630164

سؤال

لقد كنت أقوم بالكثير من معالجة XML في C# مؤخرًا وبعد عودتي إلى C# بعد فترة طويلة من ترميز جافا سكريبت، أفتقد حقًا بعض الاختصارات الرائعة لـ JS.

لقد حصلت على مستند XML كبير الحجم يتكون من الكثير من العناصر والعناصر الفرعية وما إلى ذلك.تمثيل أماكن الإقامة/رحلات الطيران/تذاكر الجذب للحجز عبر الإنترنت.

لقد قمت حتى الآن بإجراء Xpath عبر المستند لسحب المعلومات التي أحتاجها.لقد بدأت الآن في نقل هذه إلى وظائف مساعدة.لذلك، على سبيل المثال، قد نرغب في تغيير طريقة معالجتنا للحجز إذا كان يتضمن رحلة طيران من طرف ثالث.من السهل التحقق من ذلك باستخدام Xpath، فنحن فقط نتحقق من قيمة العنصر.لذلك لدي وظيفة مساعدة تقوم بذلك تمامًا، لذا فإن Xpath الخاص بي موجود في مكان واحد فقط ويقوم بإرجاع منطقي.لقد حصلت على حوالي اثنتي عشرة منها فقط وحتى الآن كنت أتعامل مع الأمر برمته كحجز، لكننا قمنا للتو ببعض الأعمال التي كانت تدور حول عنصر الرحلة في الحجز وآخر 4 مساعدين قمت بإنشائهم لقد قمت بإنشائها للتو وهي ذات صلة بالطيران مما جعلني أفكر إذا كنت أفعل هذا بشكل صحيح.

لقد تجنبت الحاجة إلى تحويل المستند بأكمله إلى كائن لأنه سيكون من المؤلم جدًا القيام به نظرًا لحجمه، ولم تكن هناك حاجة إليه حاليًا، وما زال ليس كذلك حقًا.سيكون إنشاء كل هذه الكائنات بمثابة ألم كبير وقد عملت في مشاريع مماثلة حيث تم تنفيذ هذا المسار ومن المؤلم محاولة تصحيحه أو الالتفاف حوله في البداية.نحن لا نستخدم كل المستندات، فالمعالجة التي نقوم بها بالكاد تستخدم 10% منها، لذا بدا إلغاء تسلسل كل شيء أمرًا مبالغًا فيه بعض الشيء.سيكون إلغاء تسلسلها في JS أمرًا سهلاً ولكن C# يجعلها طويلة جدًا.أعلم أنه يمكنني استخدام XSD.exe للتخلص من بعض الألم ولكني أجد أن مثل هذه الفوضى يمكن استخدامها بدون مخطط جيد (والذي بالطبع غير موجود).

ولكن هذا جعلني أفكر، هل يجب علينا دائمًا إنشاء مجموعة ضخمة من الكائنات من ملف XML الخاص بنا أم أن الطريقة السريعة التي قمت بها لا تزال مقبولة؟أنا سعيد به ولكني أحاول فقط التفكير في ما إذا كانت الكائنات ستكون طريقة أفضل.إذا قمنا بتحويله بالكامل، فسيكون على الأقل متاحًا في حال احتجنا إليه في المشاريع المستقبلية.

أدرك أنه ربما تكون هناك بعض التعليقات حول سرعة xpathing لكل شيء ولكنها سريعة بما يكفي لما نريده حاليًا، لذا فهذه ليست مشكلة هنا.

هل لديك أي أفكار حول ما إذا كنت موافقًا على مواصلة XPathing؟

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

المحلول

إذا كان لديك مخطط XML (XSD)، ثم ربما كنت دائما يفضلون إلغاء تسلسل الاعتراض النهج - انها مجرد أسهل وأنظف للعمل مع كائنات CLR لطيفة

إذا لم يكن لديك مخطط XML، ولا يمكن الحصول على واحد من المصدر / توفير البيانات الخاصة بك، ثم القرار غير واضح تماما. كما تقول، يمكن XSD.EXE يستغرق بعض من الألم من المعادلة، ولكن مثل مخطط XML الاستدلال هو عادة لا مثالية ولا في كثير من الأحيان جميلة جدا.

وصعبة واحدة - إذا كنت تشعر بالراحة مع استخدام XPath لتنقل XML الخاصة بك، كنت على التشبث به. إذا كان لديك XML التي تحتاج إلى تحليل كثير من الأحيان، وربما خلق XSD قد يكون فكرة جيدة في نهاية المطاف.

نصائح أخرى

نعم، إذا كنت بحاجة إلى 10% فقط من ملف XML، فيبدو أن XPathing مناسب هنا نظرًا لاحتمال المبالغة في إلغاء التسلسل.

في C# 4.0 وDLR يوجد متحرك الكلمة الأساسية التي تسمح باستكشاف بنية XML ديناميكيًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top