يتم استدعاء Sax on Android عدة مرات مع نفس البيانات ولكن الإزاحة
سؤال
أحاول تحليل ملف XML باستخدام SAX مع Android والمشكلة هي أن أحرف الوظيفة (...) يتم استدعاؤها عدة مرات مع ما يبدو أنه نفس البيانات التي تقابلها عدد قليل من الأحرف.
كما يمكنك أن تقول من الإخراج أدناه أول مرة يتم استدعاؤها بـ " talabama" والمرة الثانية التي يتم استدعاؤها بـ "Labama". لست متأكدًا من سبب قيامه بذلك ، ولكن إذا كان بإمكان أي شخص أن يساعد ذلك ، فسيكون ذلك رائعًا.
إدخال XML:
<?xml version="1.0" encoding="utf-8"?>
<dir><name>.</name>
<dir><name>alabama</name>
<dir><name>sub_dir_name</name>
<file><name>file_name.kml</name></file>
</dir>
</dir>
</dir>
إخراج الأحرف (...):
10-27 23:04:47.033: DEBUG/LocationHandler(10299):
10-27 23:04:49.000: DEBUG/LocationHandler(10299): alabama
10-27 23:04:51.835: DEBUG/LocationHandler(10299): labama
10-27 23:04:52.129: DEBUG/LocationHandler(10299): labama abama
10-27 23:04:52.408: DEBUG/LocationHandler(10299): labama abamasub_dir_name
10-27 23:04:52.519: DEBUG/LocationHandler(10299): ub_dir_name
10-27 23:04:52.649: DEBUG/LocationHandler(10299): ub_dir_name _dir_name
10-27 23:04:52.809: DEBUG/LocationHandler(10299): ub_dir_name _dir_namefile_name.kml
10-27 23:04:52.989: DEBUG/LocationHandler(10299): ile_name.kml
10-27 23:04:53.158: DEBUG/LocationHandler(10299): ile_name.kml le_name.kml
10-27 23:04:53.358: DEBUG/LocationHandler(10299): le_name.kml
10-27 23:04:53.529: DEBUG/LocationHandler(10299): le_name.kml le_name.kml
10-27 23:04:53.698: DEBUG/LocationHandler(10299): le_name.kml
المعالج فوق:
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException
{
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException
{
_currentElementValue = "";
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException
{
_currentElementValue += new String(ch);
Log.d(TAG, _currentElementValue);
}
المحلول
أرى مشكلة واضحة في الكود الخاص بك ، في طريقة الأحرف () ، لا يمكنك إنشاء سلسلة عمياء مع صفيف Char فقط. يجب أن يكون هكذا أدناه:
public void characters(char[] ch, int start, int length) throws SAXException
{
_currentElementValue += new String(ch, start, length);
Log.d(TAG, _currentElementValue);
}
قد ترغب في معرفة المزيد حول كيفية عمل تحليل ساكس.
لا تنتمي إلى StackOverflow