Как я собираюсь создать XML-файл с помощью pullparser для hashmap

Я пытаюсь заполнить XML-файл из значений ввода пользователя. Пользователь предоставит 2 записи ключ и значение. И у меня есть класс модели, который выглядит следующим образом:

public class Person
{    private HashMap<String, String> hash = new HashMap<String, String>();

public Person()
{   }

public Person(String key, String val)
{ hash.put(key, val);   }


public String GetFirstName(String k)
{ return hash.get(k);   }

}

Как сделать из этого объекта класса xml? и как получить значение из xml по ключу?

И я хочу, чтобы xml был таким:

<AllEntries>
   <entry key="key1">value1</entry> 
   <entry key="key2">value2</entry> 
   <entry key="key3">value3</entry>
</AllEntries> 

person Shaon Hasan    schedule 21.03.2014    source источник
comment
Под заполнением, я полагаю, вы имеете в виду добавление записей в существующий xml? Куда пойдут эти записи? В корневом узле? Как вы хотите, чтобы записи отображались? как это <person key="" value="" />? Нам понадобится немного больше информации.   -  person Rudi Kershaw    schedule 21.03.2014
comment
ya следует добавить к существующему xml. И мне нужен xml вот так: ‹AllEntries› ‹ключ входа = ключ1› значение1 ‹/entry› ‹ключ входа = ключ2› значение2 ‹/entry› ‹ключ входа = ключ3› значение3 ‹/entry› ‹/AllEntries›   -  person Shaon Hasan    schedule 21.03.2014
comment
Может быть, добавить это в вопрос и отформатировать. Это поможет людям ответить и дать более конкретный ответ для вашей проблемы. Я посмотрю на нее во время обеденного перерыва, если кто-то еще не решил ее за вас. :)   -  person Rudi Kershaw    schedule 21.03.2014
comment
Это будет здорово, потому что я должен отправить свой проект в течение 2 часов :-)   -  person Shaon Hasan    schedule 21.03.2014


Ответы (1)


Вам необходимо использовать синтаксический анализатор XML, такой как Java DOM или SAX. Пример ниже представляет собой модель Java DOM и показывает, как пройти через HashMap и добавить свои записи в your_xml.xml.

File xmlFile = new File("your_xml.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);

for (Map.Entry<String, String> m : hash.entrySet()) {
    // Create your entry element and set it's value
    Element entry = doc.createElement("entry");
    entry.setTextContent(m.getValue());
    // Create an attribute, set it's value and add the attribute to your entry       
    Attr attr = doc.createAttribute("key");
    attr.setValue(m.getKey());
    entry.setAttributeNode(attr);
    // Append your entry to the root element
    doc.getDocumentElement().appendChild(entry);
}

Тогда вам просто нужно сохранить документ поверх исходного файла. После того, как ваш Document был отредактирован, вы, вероятно, захотите преобразовать его в строку для синтаксического анализа с вашим OutputStream выбора для экономии.

person Rudi Kershaw    schedule 21.03.2014
comment
какой хэш и как добавить мои данные в xml, я имею в виду новые данные со старыми? эээ, плюс как добавить хэш-карту в xml? - person Shaon Hasan; 21.03.2014
comment
@ShaonHasan - hash - это ваш HashMap экземпляр, согласно вашему примеру кода в вопросе. Приведенный выше код добавляет данные в xml в указанном вами формате в XML-файл с именем your_file.xml. Здесь нужно указать расположение файла. - person Rudi Kershaw; 21.03.2014
comment
Я только что добавил: Person hash = new Person (1, Shaon); в начале деятельности. Но hash.entrySet () показывает ошибку при наборе записей. :-( - person Shaon Hasan; 21.03.2014
comment
@ShaonHasan - hash должен быть экземпляром HashMap, а не Person. Я думаю, вам нужно прочитать хорошую книгу по Java или какой-нибудь учебник, чтобы понять область действия и отношения IS-A объекта. Я не уверен, что смогу рассказать вам обо всем этом, чтобы получить нужный вам результат. Это слишком много для ответа на StackOverflow. - person Rudi Kershaw; 21.03.2014
comment
k .. добавлено HashMap ‹String, String› hash = new HashMap ‹String, String› (); hash.put (2, Шаон); внутренняя деятельность. и код ur внутри блока try catch также внутри активности. я снова сделал неправильно? - person Shaon Hasan; 21.03.2014
comment
@ShaonHasan - Это должно сработать, но вам все равно нужно будет сохранить созданный документ. - person Rudi Kershaw; 21.03.2014
comment
Я добавил этот код под ur: TransformerFactory transformerFactory = TransformerFactory.newInstance (); Трансформатор transformer = transformerFactory.newTransformer (); Источник DOMSource = новый источник DOMSource (документ); StreamResult streamResult = новый StreamResult (новый файл (your_xml1.xml)); transformer.transform (источник, streamResult); но не могу найти какой-либо XML-файл в папке данных внутри проекта. - person Shaon Hasan; 21.03.2014
comment
@ShaonHasan - Любые xmls в папках вашего проекта компилируются во время проекта, поэтому вы не можете изменить / заменить их во время выполнения. Вам нужно будет сохранить копию в хранилище Android. - person Rudi Kershaw; 21.03.2014