Как добавить детей к дочерним элементам, используя jsoup document

Я пытаюсь создать следующий пример.

<body> <resources> <string-array name="mytest"> <item number="1"> <name>Testname</name> </item> <item number="2"> <name>blaat..</name> </item> </string-array> </resources> </body> 

Я пробую это, выполнив следующее:

 FileInputStream fis = openFileInput("test1.xml"); Document doc = Jsoup.parse(fis, "UTF-8", ""); Node node = doc.getElementsByTag("item").get(getPosition()); fis.close(); fis = openFileInput("test2.xml"); Document doc2 = Jsoup.parse(fis, "UTF-8", ""); fis.close(); Elements test = doc2.getElementsByTag("resources"); if(test.size() < 0){ fis = openFileInput("test2.xml"); doc2 = Jsoup.parse(fis, "UTF-8", ""); fis.close(); doc2.appendElement("resources").parent(); FileOutputStream os = openFileOutput("test2.xml", Context.MODE_PRIVATE); os.write(doc2.toString().getBytes()); os.close(); fis = openFileInput("test2.xml"); doc2 = Jsoup.parse(fis, "UTF-8", ""); fis.close(); doc2.appendChild(doc2.appendElement("string-array").attr("name", "mytest")).parent(); os = openFileOutput("test2.xml", Context.MODE_PRIVATE); os.write(doc2.toString().getBytes()); os.close(); System.out.println("Created file\n"); } doc2.appendChild(node); FileOutputStream os = openFileOutput("test2.xml", Context.MODE_PRIVATE); os.write(doc2.toString().getBytes()); os.close(); 

И теперь я получаю:

 <!-- test1.xml (input) --> <resources> <string-array name="firsttest"> <item number="1"> <name>Testname</name> </item> <item number="2"> <name>blaat..</name> </item> <item number="3"> <name>Next item</name> </item> </string-array> </resources> <!-- test2.xml (output)--> <body> <resources></resources> <string-array name="mytest"></string-array> <item number="1"> <name>Testname</name> </item> <item number="2"> <name>blaat..</name> </item> </body> 

Может ли кто-нибудь сказать мне, что я делаю неправильно, и, может быть, приведу несколько примеров того, как это сделать?

заранее спасибо

EDIT: Чтобы немного подробнее: я хочу скопировать некоторые элементы из test1.xml в test2.xml. Таким образом, в основном пользователь выбирает listitem, который указывает на число в text1.xml (номер позиции), и этот элемент затем должен быть скопирован в (ПУНКТ ЗДЕСЬ

Jsoup обычно используется для разбора html, а не xml, хотя они имеют одинаковую структуру. По умолчанию Jsoup разбирает что-либо, а затем обертывает его внутри <html><body></body></html> .

Пример для вашей цели:

 import org.jsoup.nodes.*; Document doc = Jsoup.parse(""); // clear <html><body></body></html> doc.html(""); Element e = doc.appendElement("body").appendElement("resources"); e = e.appendElement("string-array"); e.attr("name", "mytest"); for (int i = 0; i < 10; i++) { Element sub = e.appendElement("item"); sub.attr("number", Integer.toString(i)); sub.appendElement("name").text("blahh"); } 

Рекомендации:

  • синтаксический (String)
  • HTML (String)
  • appendElement (String)
  • Attr (String, String)
  • текст (String)

Это не решит вашу точную проблему, но вы должны понять это. Я довольно много создаю test2.xml в качестве нового документа. Итак, если это существует с информацией в нем, вам придется обойти это.

  String html = "<resources>" + "<string-array name=\"firsttest\">" + "<item number=\"1\">" + "<name>Testname</name>" + "</item>" + "<item number=\"2\">" + "<name>blaat..</name>" + "</item>" + "<item number=\"3\">" + "<name>Next item</name>" + "</item>" + "</string-array>" + "</resources>"; Document test1 = Jsoup.parse(html); Document test2 = Jsoup.parse(""); test2.body().append("<resources>"); test2.select("resources").append("<string-array name='mytest'>"); test2.select("[name=mytest]").append(test1.select("item[number=1]").toString()); test2.select("[name=mytest]").append(test1.select("item[number=2]").toString()); System.out.println(test2.body().children()); 

Вот результат:

  <resources> <string-array name="mytest"> <item number="1"> <name> Testname </name> </item> <item number="2"> <name> blaat.. </name> </item> </string-array> </resources>