يتم استدعاء Sax on Android عدة مرات مع نفس البيانات ولكن الإزاحة

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

  •  27-09-2019
  •  | 
  •  

سؤال

أحاول تحليل ملف 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);
}


قد ترغب في معرفة المزيد حول كيفية عمل تحليل ساكس.

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