Tinyxml2: اختبار القراءة والكتابة مع newline

تم إنشاؤها على ٢٥ مارس ٢٠١٩  ·  9تعليقات  ·  مصدر: leethomason/tinyxml2

أهلا

لدي ملف XML أساسي:

<?xml version="1.0" encoding="UTF-8"?>
<Reminders>
    <W20190408>xxxx</W20190408>
    <W20190624>yyyy</W20190624>
</Reminders>

أريد أن أكون قادرًا على دعم الخطوط المتعددة لهذه القيم. ما هي أبسط طريقة لتلبية ذلك باستخدام XML؟

كنت سأستخدم حرف ثم استبدلها بهروب \ r \ n. حاولت كتابة & # x13 & X1 في النص لكنها أنهيتنا كنص حرفي وما إلى ذلك في الملف.

ما هي الطريقة الصحيحة؟

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

ملف XML مخصص لجهاز الكمبيوتر وليس للإنسان. حتى الآن ، الطباعة الجميلة ليست هي الهدف.

ال 9 كومينتر

ماذا عن CDATA؟

<![CDATA[ Text
With new line
]]>

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

ملف XML مخصص لجهاز الكمبيوتر وليس للإنسان. حتى الآن ، الطباعة الجميلة ليست هي الهدف.

comargo نقطة صالحة. أعتقد أن ما يدور في ذهني هو الطريقة التي أحب بها تقديم "الكود" الخاص بي. لكني أتقبل ما تقوله.

لم أعمل بالفعل مع CDATA في tinyxml2 من قبل. ما هي الطريقة الصحيحة لقراءتها وكتابتها؟ في الوقت الحالي لدي:

for (RemindersList::const_iterator iterReminder = m_mapReminders.begin();
        iterReminder != m_mapReminders.end();
        ++iterReminder)
{
    CReminder rReminder = iterReminder->second;

    // Create reminder node
    XMLElement *pReminder = m_docReminders.NewElement(CT2CA(rReminder.GetKey(), CP_UTF8));
    pReminder->SetText(CT2CA(rReminder.GetReminder(), CP_UTF8));

    // Append to XML document
    pReminders->InsertEndChild(pReminder);
}

لم أجرب نفسي بعد ، ولكن إذا كنت ستأخذ أداة بحث عن الكلمة الأساسية "CDATA" في ملف xmltest.cpp ، فهناك بعض الكتل حول ذلك.

اضطررت الى تغيير مثل هذاcomargo 👍

// Iterate the reminders
for (RemindersList::const_iterator iterReminder = m_mapReminders.begin();
        iterReminder != m_mapReminders.end();
        ++iterReminder)
{
    CReminder rReminder = iterReminder->second;

    // Create reminder node
    XMLElement *pReminder = m_docReminders.NewElement(CT2CA(rReminder.GetKey(), CP_UTF8));
    XMLText *pText = m_docReminders.NewText(CT2CA(rReminder.GetReminder(), CP_UTF8));
    pText->SetCData(true);
    pReminder->InsertEndChild(pText);

    // Append to XML document
    pReminders->InsertEndChild(pReminder);
}

ومع ذلك ، لاحظ أن tintyxml2 تتوقع ثوابت السطر الجديد \n . بالنسبة إلى عناصر التحكم في CEdit ، يجب أن تكون \r\n . لذا قبل أن أقوم بإدخال السلسلة إلى / من XML ، يجب أن أقوم بتبديل الثوابت.

هل هناك إعداد في tinyxml2 لتلبية ذلك؟ أنا مندهش من عدم السماح لي باستخدام \r\n .

يرجى تقديم النصيحة.

ajtruckle كما ترى في المصدر ( tinyxml2.cpp line 1147 ) - لا توجد إعدادات لها ... لا يمكنني تحديد السلوك الصحيح.

ajtruckle كما أرى ، لا يوجد فهم مشترك للسلوك الصحيح: https://stackoverflow.com/questions/15016004/whats-the-correct-way-to-encode-cr-lf-line-breaks-in-text قيم xml
ولكن هناك حل مشترك لمثل هذه المهمة: تشفير تسلسل CR-LF بزوج من الكيانات ...

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

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

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

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

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

MortenMacFly picture MortenMacFly  ·  18تعليقات

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