أهلا
لدي ملف XML أساسي:
<?xml version="1.0" encoding="UTF-8"?>
<Reminders>
<W20190408>xxxx</W20190408>
<W20190624>yyyy</W20190624>
</Reminders>
أريد أن أكون قادرًا على دعم الخطوط المتعددة لهذه القيم. ما هي أبسط طريقة لتلبية ذلك باستخدام XML؟
كنت سأستخدم حرف ثم استبدلها بهروب \ r \ n. حاولت كتابة & # x13 & X1 في النص لكنها أنهيتنا كنص حرفي وما إلى ذلك في الملف.
ما هي الطريقة الصحيحة؟
ماذا عن 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 بزوج من الكيانات ...
ajtruckle إليك إجابة أخرى عن السؤال: https://stackoverflow.com/questions/2817378/does-the-xml-specification-states-that-parser-need-to-convert-nr-to-n-always
التعليق الأكثر فائدة
ملف XML مخصص لجهاز الكمبيوتر وليس للإنسان. حتى الآن ، الطباعة الجميلة ليست هي الهدف.