Урок 79. XmlPullParser. Парсим XML
Re: Урок 79. XmlPullParser. Парсим XML
скорее всего неправильный импорт R файла ресурсов, не то импортировал. Так что проверь импорт.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 79. XmlPullParser. Парсим XML
Ну так и пишитеalgebra писал(а):в папке layout а не layouts находится файл activity_main.xml и такой же в папке menu
setContentView(R.layout.activity_main);
Re: Урок 79. XmlPullParser. Парсим XML
Подскажите, как можно вытащить XmlPullParser xpp = prepareXpp(); наружу, как глобальную переменную? Чтобы один раз создать xpp, а потом на неё ссылать из разных функций, а то я в каждой функуции создаю локальную xpp, а как сделать одну глобальную не знаю.
Re: Урок 79. XmlPullParser. Парсим XML
public static XmlPullParser xpparreke писал(а):Подскажите, как можно вытащить XmlPullParser xpp = prepareXpp(); наружу, как глобальную переменную? Чтобы один раз создать xpp, а потом на неё ссылать из разных функций, а то я в каждой функуции создаю локальную xpp, а как сделать одну глобальную не знаю.
Только это не есть хоросо, противоречит правилам ООП.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 79. XmlPullParser. Парсим XML
у меня ошибку показывает когда так делаю.rezak90 писал(а): public static XmlPullParser xpp
Только это не есть хоросо, противоречит правилам ООП.
а как правильно надо делать? в каждой функции создавать локальный xpp?
Re: Урок 79. XmlPullParser. Парсим XML
в каждой активити а не "функции" следует создавать, или же передавать между активити. Просто если делать все переменные "глобальными" то зачем тогда private и parcelable вообще)))
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 79. XmlPullParser. Парсим XML
Ну, прочитать его можно. А какие варианты есть чтоб изменить его и сохранить потом в файл ? И ещё: если открывать из ресурса, то этот ресурс(prefs.xml) изменить нельзя или такое возможно ?!
Часы триггер | Гденьги | Линии живые обои | Поддержите проекты
Re: Урок 79. XmlPullParser. Парсим XML
Ресурсы прложения (папка res), также как и манифест, библиотеки классов находящиеся в пакете apk изменить после установки пакета уже нельзя. Вы только можете скопировать их содержимое в другое место и уже там изменять.
Re: Урок 79. XmlPullParser. Парсим XML
Ясно)) с таким способом можно только использовать как статическую БД. А как всётаки редактировать такой файл ?AndreyI писал(а):Ресурсы прложения (папка res), также как и манифест, библиотеки классов находящиеся в пакете apk изменить после установки пакета уже нельзя. Вы только можете скопировать их содержимое в другое место и уже там изменять.
Часы триггер | Гденьги | Линии живые обои | Поддержите проекты
Re: Урок 79. XmlPullParser. Парсим XML
elron писал(а): А как всётаки редактировать такой файл ?
apk ко всему прочему, еще и подписан электронной подписью, даже если вы каким-то образом и измените инсталлированный пакет, то работать он уже не будет.AndreyI писал(а): Вы только можете скопировать их содержимое в другое место и уже там изменять.
Re: Урок 79. XmlPullParser. Парсим XML
Можно как-нибудь открыть xml файл не лежащий в папке res/xml, как показано в уроке ?
Например, я загрузил файл xml из интернета, сохранил его в кэш-папке. Если нельзя, то подскажите как лучше обойти эту проблему.
Код: Выделить всё
getResources().getXml(R.xml.data);
Например, я загрузил файл xml из интернета, сохранил его в кэш-папке. Если нельзя, то подскажите как лучше обойти эту проблему.
Re: Урок 79. XmlPullParser. Парсим XML
так вытягивайте как обычный файл с системы File file = new File("your_temp_dir/file.xml");
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 79. XmlPullParser. Парсим XML
Отлично, а с помощью чего его передать, не так жеrezak90 писал(а):так вытягивайте как обычный файл с системы File file = new File("your_temp_dir/file.xml");
Код: Выделить всё
XmlPullParser xpp = file
UPD:
Нашёл как решить, может кому пригодится.
Код: Выделить всё
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser parser = factory.newPullParser();
File file = new File(Environment.getExternalStorageDirectory()+ "/new.xml");
FileInputStream fis = new FileInputStream(file);
parser.setInput(new InputStreamReader(fis));
Re: Урок 79. XmlPullParser. Парсим XML
ну так а я о чём говорил, читаем файл, читаем стрим, стрим в парсер
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 79. XmlPullParser. Парсим XML
не актуально, разобрался сам
Re: Урок 79. XmlPullParser. Парсим XML
Здравствуйте.
Есть такая задача, вроде простая, но у меня пока не получается. Необходимо прочесть xml файл следующего вида:
<data>
<phone>
<id>1</id>
<company>Samsung</company>
<model>Galaxy</model>
<price>18000</price>
</phone>
<phone>
<id>2</id>
<company>htc</company>
<model>desire</model>
<price>18000</price>
</phone>
</data>
и вывести на экран только один элемент сравнивая поле id с уже существующей переменной.
Есть такая задача, вроде простая, но у меня пока не получается. Необходимо прочесть xml файл следующего вида:
<data>
<phone>
<id>1</id>
<company>Samsung</company>
<model>Galaxy</model>
<price>18000</price>
</phone>
<phone>
<id>2</id>
<company>htc</company>
<model>desire</model>
<price>18000</price>
</phone>
</data>
и вывести на экран только один элемент сравнивая поле id с уже существующей переменной.
Re: Урок 79. XmlPullParser. Парсим XML
Я бы сделал как-то так:Здравствуйте.
Есть такая задача, вроде простая, но у меня пока не получается. Необходимо прочесть xml файл следующего вида:
<data>
<phone>
<id>1</id>
<company>Samsung</company>
<model>Galaxy</model>
<price>18000</price>
</phone>
<phone>
<id>2</id>
<company>htc</company>
<model>desire</model>
<price>18000</price>
</phone>
</data>
и вывести на экран только один элемент сравнивая поле id с уже существующей переменной.
Код: Выделить всё
String xmlString = "<data>" +
"<phone><id>1</id><company>Samsung</company><model>Galaxy</model><price>18000</price></phone>" +
"<phone><id>2</id><company>htc</company><model>desire</model><price>18000</price></phone>" +
"</data>";
HashMap<String, String> deviceInfo = new HashMap<String, String>();
try {
XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance();
xmlPullParserFactory.setNamespaceAware(true);
XmlPullParser xmlPullParser = xmlPullParserFactory.newPullParser();
xmlPullParser.setInput(new StringReader(xmlString));
int currentDeviceId = 0;
int needDeviceId = 2;
String tagName = "";
boolean exit = false;
while (xmlPullParser.getEventType() != XmlPullParser.END_DOCUMENT && !exit) {
switch (xmlPullParser.getEventType()) {
// начало тега
case XmlPullParser.START_TAG:
if (xmlPullParser.getName().equals("id")) {
tagName = "id";
} else if (xmlPullParser.getName().equals("company")) {
tagName = "company";
} else if (xmlPullParser.getName().equals("model")) {
tagName = "model";
} else if (xmlPullParser.getName().equals("price")) {
tagName = "price";
}
break;
// конец тега
case XmlPullParser.END_TAG:
if (xmlPullParser.getName().equals("id") ||
xmlPullParser.getName().equals("company") ||
xmlPullParser.getName().equals("model") ||
xmlPullParser.getName().equals("price")) {
tagName = "";
} else if (xmlPullParser.getName().equals("phone") && currentDeviceId == needDeviceId) {
exit = true;
}
break;
// содержимое тега
case XmlPullParser.TEXT:
if (tagName.length() > 0) {
if (tagName.equals("id")) {
currentDeviceId = Integer.parseInt(xmlPullParser.getText());
} else if (currentDeviceId == needDeviceId) {
if (tagName.equals("company") ||
tagName.equals("model") ||
tagName.equals("price")) {
deviceInfo.put(tagName, xmlPullParser.getText());
}
}
}
break;
default:
break;
}
xmlPullParser.next();
}
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
Re: Урок 79. XmlPullParser. Парсим XML
Спасибо помогло, все работает.
Re: Урок 79. XmlPullParser. Парсим XML
А вам не кажется, что обработка xml через XmlPullParser выглядит как-то примитивно?
Мне вот кажется более удобным использование DocumentBuilder.parse(). Он возвращает объект типа Document. И в нем есть все необходимые для работы с xml методы. Ими намного удобнее пользоваться, чем парсить xml практически вручную.
Вот отрывок кода для примера:
Мне вот кажется более удобным использование DocumentBuilder.parse(). Он возвращает объект типа Document. И в нем есть все необходимые для работы с xml методы. Ими намного удобнее пользоваться, чем парсить xml практически вручную.
Вот отрывок кода для примера:
Код: Выделить всё
String wetherUrl = "http://xml.weather.co.ua/1.2/forecast/773";
URL url = new URL(wetherUrl);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(url.openStream());
Element currentWether = (Element)doc.getElementsByTagName("current").item(0);
String currentTemper = currentWether.getElementsByTagName("t").item(0).getTextContent();
NodeList dayForecasts = doc.getElementsByTagName("day");
Re: Урок 79. XmlPullParser. Парсим XML
если большой объём xml файла то лучше использовать sax парсер чем dom, так как sax работает быстрее
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена