فقدان Whitespace حول الرموز الهادئة في CDATA باستخدام Govat XML Garser في C ++

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

سؤال

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

<ProjectDescription>Test &amp; spaces around&amp;some  &amp;  amps!</ProjectDescription>

أو: "اختبار ومسافات حولها وبعضها وأمز!" <- جيد!

عندما أستخدم APPAT لتحليلها، تحصل معالج البيانات الخاص بي فقط على أجزاء من السلسلة بأكملها في وقت واحد. "اختبار"، ثم "&"، ثم "المسافات حولها"، التالي "&"، وغيرها، وما إلى ذلك عندما أحاول بعد ذلك إعادة بناء السلسلة الأصلية، يتم إسقاط جميع التباعد حول و "STALLER" لأن معالج البيانات لا يحصل أبدا على يراهم. عندما أعيد كتابة XML أحصل عليه:

<ProjectDescription>Test&amp;spaces around&amp;some&amp;amps!</ProjectDescription>

أو: "اختبار ومساحات حولها وبعضها!" <- سيئة!

هل هذه مشكلة معروفة مع الحلول الحالية؟ هل هناك بعض الإعدادات التي يمكنني تقديمها للمكافحة للسيطرة على سلوكها حول الرموز المتفجرة؟

لقد التقى محاولاتي في Googling إجابة بالفشل الكئيب.

تحرير: استجابة لسؤال في التعليقات: لدي معالج خاص بي، الذي أسجله مع المحلل:

parser=XML_ParserCreate(NULL); 
XML_SetUserData(parser,&depth);
XML_SetElementHandler(parser,startElement,endElement); 
XML_SetCharacterDataHandler(parser,dataHandler); 

أعلن المعالج على النحو التالي:

static void dataHandler(void *userData,const XML_Char *s,int l) 

ثم "S" يحتوي على البيانات في العنصر. بدون أي وأشياء، إنها السلسلة بأكملها بين العلامات المفتوحة والخلف، في حالة "سلسلة مع مسافات".

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

المحلول

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

void CharDataHandler( void * parser, 
                       const XML_Char *s,
                       int len ) {
    std::cerr << "[" << s << "]\n";
    std::cerr << len << "\n";
    // my own processing here - not important 
}

لا أرى السلوك الذي تتحدث عنه. لبيانات الإدخال:

XXX &amp; YYY

أحصل على ثلاثة أحداث مع مجموعة بيانات char * وطولها كفلور

char * = "XXX &amp; YYY"
length = 4

char * = "&"
length = 1

char * = " YYY"
length = 4

لذلك يتم الاحتفاظ المساحات. بقدر ما أعرف أنني لا أستخدم أي إعدادات مختلفة. ما إصدار ومنصة المغتربين الذي تستخدمه؟

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