Tinyxml2: صف / عمود العنصر الحالي / الخطأ؟

تم إنشاؤها على ١٨ مايو ٢٠١٢  ·  18تعليقات  ·  مصدر: leethomason/tinyxml2

في TinyXML1 كان من الممكن الاستعلام عن الصف / العمود الخاص بالعنصر الحالي (على سبيل المثال في حالة حدوث خطأ). كان من الجيد جدًا إظهار رسالة خطأ وصفية حتى يتمكن المستخدم من تحديد الخطأ بسهولة. حتى أنه كان من الممكن فتح محرر والقفز إلى هذا العنصر.

أرى أنه في TinyXML2 اختفت أساليب Row () و Column (). هل سيتم العودة أم أن هناك طريقة بديلة / أفضل للحصول على تلك المعلومات؟

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

enhancement

التعليق الأكثر فائدة

لقد أضفت دعم رقم السطر (الصف) في شوكة:
https://github.com/kezenator/tinyxml2

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

تم أيضًا إنشاء طلب سحب رقم 503

ال 18 كومينتر

الشيء الصعب هو أن TinyXML-2 لا يحلل الصف / العمود في ممر التحليل الأولي. يتم ذلك لأسباب تتعلق بالأداء. في حالة حدوث خطأ ، يمكن للكود مسح التحليل ومعرفة الصف / العمود الحالي ، ولكنه تغيير متضمن بشكل معقول. لم أتحقق حقًا من قيمة تتبع الصف / العمود مقابل تعقيد الكود الذي يعد مقايضة جيدة ، ولكن من الواضح أن لدي مخاوف من أنه ليس كذلك.

شكرا لك على الجواب السريع (!).

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

ربما أنا الوحيد ، لكن رؤية هذه الميزات قد اختفت أمر محزن. :-(

ردود فعل طيبة؛ لا توجد وعود حول كيفية / متى يمكن القيام بذلك ، ولكن معرفة ذلك يحدث فرقًا بالتأكيد يزيد من الأولوية. سألقي نظرة وأرى كيف يمكن أن يتم ذلك على النظام الحالي.

يبدو الأمر جيدًا بالنسبة لي ... من الجميل أن أرى أنك تفهم حالة الاستخدام الخاصة بي. فقط خذ وقتك ، سأراقب بصبر GIT. ؛-)

ومع ذلك: استمروا في العمل الرائع ، فأنا أستخدم هذه المكتبة منذ العصور لأنها تلبي جميع احتياجاتي وهي ... صغيرة جدًا. ؛-)

يا ليثوماسون !! سأكون سعيدًا لتناول هذا الخطأ ... شكرًا مقدمًا ...

أفكومار - يسعدني أن أرى طلب سحب لمعالجة هذا الأمر ، بالتأكيد! فقط كن حريصًا على عدم التسبب في تحليل السلاسل / إنهاء فارغة حتى يحدث خطأ.

لقد عثرت على هذا مرة أخرى -avkumar : هل حاولت بالفعل (هل سحبت بالفعل ؟!)؟

MortenMacFly : لماذا لا تلتزم بـ tinyXML-1 إذن؟

حسنا سافعل. هنا ، أردت أن أشير إلى أن IMHO هذه ميزة مهمة انتهت. لا شيء آخر.

إنه طلب صالح ، بالتأكيد ، صعب التنفيذ. أعتقد أيضًا أن هناك الكثير من المزايا لاستخدام TinyXML-2 على -1.

إذا كنت تريد إضافة هذا ، فهل يمكنك التأكد من جعله اختياريًا؟ مثل المعالج الأولي #define لتجنب الكود غير الضروري للأشخاص الذين لا يحتاجون إليه؟ يجعل الشفرة المترجمة أسرع وأقصر.

أرغب في شيء من هذا القبيل لتجاهل وظيفة printXML ، لأنه في حالتنا نحتاج فقط إلى قراءة XML وتحليله ، ولن نكون قادرين على تعديله أو كتابته. هل يجب أن أفتح قضية أخرى لذلك؟

أقدر الرغبة في تقليل الكود ، ولكن يتم تجنب الميزات الاختيارية عمدًا. كل #if من خلال الرمز يضاعف مساحة الاختبار. (على الرغم من أن حالات #if في نظام التشغيل / النظام الأساسي أمر لا مفر منه.) يتحول ذلك بسرعة إلى مشكلة: يمكن أن تتسلل الأخطاء إلى مسار واحد دون الآخر ، ويجب على كل من يشارك / يناقش الكود أن يوضح المسار الذي يستخدمه. عدم تناسق الأخطاء على نظام التشغيل Windows مقابل Android مقابل * لقد قام Nix بالفعل بضيقني عدة مرات على TinyXML-2 ، التي لا تحتوي إلا على النظام الأساسي #if ، والميزة #if هي مشكلة ابتليت بها TinyXML-1.

عادل بما يكفي. دعونا نأمل ألا يضيف الكثير من سخام ...

أعتقد أن الإبلاغ عن الخطأ أمر مهم للغاية ، وللأسف هذه المكتبة تخطئ. قد يكون هناك حل سهل بالرغم من ذلك:

تحتوي فئة XMLDocument الخاصة بـ TinyXML2 حاليًا على GetErrorStr1 و GetErrorStr2 ، والذي يبدو دائمًا أنه يعيد إما NULL أو المؤشرات إلى موقع في _charBuffer الداخلي الخاص به. يجب أن يكون من السهل إضافة طرق مثل GetErrorOffset1 و GetErrorOffset2 التي ترجع إزاحة كل من هذه السلاسل داخل المخزن المؤقت لـ char. في C ++ ، يمنحك طرح مؤشرين إلى نفس المصفوفة قيمة الإزاحة.

الإزاحة ليست مفيدة مثل رقم الصف والعمود ، لكن برامج تحرير النصوص الجيدة توفر طرقًا للبحث عن إزاحة في ملف. بالإضافة إلى ذلك ، يمكن أن يوفر TinyXML2 طريقة تأخذ تعويضًا وتعطيك رقم الصف والعمود.

في الواقع ، بالنسبة لأي جزء من مستند XML ، يجب أن يوفر TinyXML2 طرقًا للحصول على مؤشر const char * إليه ، جنبًا إلى جنب مع إزاحة البايت ، وإزاحة الأحرف ، وأرقام الصفوف والأعمدة. سيساعد هذا المستخدم على إنشاء رسائل الخطأ الخاصة به لأخطاء المستوى الأعلى التي لم يتم اكتشافها بواسطة TinyXML2 (على سبيل المثال ، العناصر خارج الترتيب).

إذا كان GetErrorStr1 و GetErrorStr2 مضمونين دائمًا أن يكونا NULL أو يشيران إلى مكان داخل مخزن char المؤقت ، فإن إضافة هذه الميزة لن يتسبب في أي عقوبة على الأداء. إذا كانوا يشيرون أحيانًا إلى مكان آخر ، فستكون هناك عقوبة أداء صغيرة لأنك ستحتاج إلى إضافة منطقي يسجل ما إذا كانوا يشيرون إلى _charBuffer أم لا ؛ أعتقد أنه إذا لم يشيروا إلى المخزن المؤقت لـ char ، فلن يضمن معيار C ++ النتائج من حساب المؤشر عليهم.

لقد أضفت دعم رقم السطر (الصف) في شوكة:
https://github.com/kezenator/tinyxml2

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

تم أيضًا إنشاء طلب سحب رقم 503

كانت أداة النهج الأول هي تمرير رقم السطر الحالي من خلال ParseDeep والوظائف المرتبطة بها.
تم تحديث SkipWhitespace و ParseText لزيادة السطر عند رؤية "\ n".
أيضًا ، يجب على Identify التراجع عن رقم السطر عندما يكتشف محتوى نصيًا يبدأ بمسافة بيضاء.

تغير اختبار التحليل dream.xml من حوالي 1.2 مللي ثانية إلى حوالي 1.4 مللي ثانية على جهاز الكمبيوتر (i7-6770HQ + VisualStudio 2015 Community Update 3)

إذا جاز لي الاقتباس من leethomason:

الطريقة التي يقوم بها TinyXML-2 بالتحليل تجعل هذا الأمر أكثر صعوبة في التنفيذ ؛

أود أن أقول مع هذا الحد الأدنى من النفقات العامة أرى شخصيًا مزايا أكثر من العيوب.
نأمل أن يوافق leethomason ويدمج هذا في الريبو الرئيسي.
شكرا جزيلا لك يا كيزيناتور ، عمل جميل جدا ...

تم إصلاحه منذ بعض الوقت ؛ فشل في إغلاق القضية.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

ajtruckle picture ajtruckle  ·  9تعليقات

leethomason picture leethomason  ·  4تعليقات

kurylo picture kurylo  ·  5تعليقات

vigneshrams picture vigneshrams  ·  3تعليقات

KerstinKeller picture KerstinKeller  ·  5تعليقات