سؤال

في البيئة هنا يمكنني استخدام جافا تسلسل مجموعة النتائج إلى XML.وهو يحدث أساسا مثل هذا:

//foreach column of each row
xmlHandler.startElement(uri, lname, "column", attributes);
String chars = rs.getString(i);
xmlHandler.characters(chars.toCharArray(), 0, chars.length());
xmlHandler.endElement(uri, lname, "column");

XML يبدو مثل هذا في فايرفوكس:

<row num="69004">
    <column num="1">10069</column>
    <column num="2">sd&#26;</column>
    <column num="3">FCVolume                      </column>
</row>

ولكن عند تحليل XML أحصل على a

org.xml.ساكس.SAXParseException:حرف الإشارة "&#26"هو XML غير صالح الحرف.

سؤالي الآن هو:التي charactes هل يجب أن تحل محل أو كيف يجب أن ترميز شخصياتي ، وأنها سوف تكون صالحة XML ؟

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

المحلول

لقد وجدت قائمة مثيرة للاهتمام في Xml المواصفات:وفقا قائمة على تثبيط استخدام الحرف #26 (Hex: #x1A).

شخصيات محددة في النطاقات التالية هي أيضا بالإحباط.فهي إما أحرف التحكم أو دائمة غير محددة Unicode الشخصيات

ترى نطاقات كاملة.

هذا القانون يحل محل جميع غير صالحة Xml Utf8 من سلسلة:

public String stripNonValidXMLCharacters(String in) {
    StringBuffer out = new StringBuffer(); // Used to hold the output.
    char current; // Used to reference the current character.

    if (in == null || ("".equals(in))) return ""; // vacancy test.
    for (int i = 0; i < in.length(); i++) {
        current = in.charAt(i);
        if ((current == 0x9) ||
            (current == 0xA) ||
            (current == 0xD) ||
            ((current >= 0x20) && (current <= 0xD7FF)) ||
            ((current >= 0xE000) && (current <= 0xFFFD)) ||
            ((current >= 0x10000) && (current <= 0x10FFFF)))
            out.append(current);
    }
    return out.toString();
}    

لها مأخوذة من XML غير صالح الشخصيات:عندما صالحة UTF8 لا يعني صالح XML

ولكن مع ذلك كان لا يزال UTF-8 compatility المسألة:

org.xml.sax.SAXParseException: Invalid byte 1 of 1-byte UTF-8 sequence

بعد القراءة XML - العودة XML كما UTF-8 من بريمج حاولت فقط ماذا يحدث إذا أنا وضعت Contenttype مثل هذا:

response.setContentType("text/xml;charset=utf-8");

وعملت ....

نصائح أخرى

لغة التوصيف الموسعة (XML) 1.0 يقول:

حرف علامة الضم ( & ) ، قوس المثلث الأيمن (<) يجب أن لا تظهر في حرفية شكل إلا عندما تستخدم العلامات المحددات ، التعليق على معالجة التعليمات ، أو أ CDATA القسم.إذا كان هناك حاجة إليها في أي مكان آخر ، يجب أن تكون هرب باستخدام أما مراجع الحرف رقمية أو السلاسل "&" و "<" على التوالي.قوس المثلث الأيمن (>) قد تكون ممثلة باستخدام سلسلة " > " ، و أن ، التوافق يكون هرب باستخدام إما ">" أو حرف الإشارة عند يظهر في سلسلة "]]>" في المحتوى هو أن سلسلة لا بمناسبة نهاية CDATA القسم.

يمكنك تخطي ترميز إذا كنت تستخدم CDATA:

<column num="1"><![CDATA[10069]]></column>
<column num="2"><![CDATA[sd&]]></column>

أي إصدار من الجافا هل يعمل ؟ ساكس المشروع يقول:

J2SE 1.4 حزم نسخة قديمة من SAX2.كيف يمكنني جعل SAX2 r2 أو في وقت لاحق المتاحة ؟

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