Parsowanie plikow XML

0

Witam mam pytanie, czy mógłby mnie ktoś nakierować bądź chociaż podpowiedzieć, który parser spełniałby oczekiwania do mojego zadania.
Mam plik xml, który wygląda następująco

<?xml version="1.0" encoding="UTF-8" standalone="true"?>

<Person>
	<Name><p>Marcin</P></Name>
	<Surname>Kowali</Surname>
	<PESEL><p>123456789</p></PESEL>
</Person>
<Product>
	<ProductName><span lang="EN-US" style="font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin; mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin; mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman"; letter-spacing:0pt;mso-ansi-language:EN-US;mso-fareast-language:EN-US">Persil<o:p></o:p></span></ProductName>
	<ProductPrice>14.99</ProductPrice>
</Product>

i muszę z niego usunąć tagi htmlowe jak p, span, o:p.
Tak więc zabrałem się za studiowanie dokumentacji Jsoupa i znalazłem metodę addTags do obiektu whitelist kod:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

import org.jsoup.Jsoup;
import org.jsoup.safety.Whitelist;

public class FileToParse {

	public static void main(String[] args) throws IOException {
		final String filePath ="Before.xml";
		Whitelist whitelist = Whitelist.none();
		String fileToParse = new String(Files.readAllBytes(Paths.get(filePath)));
//		Document doc = Jsoup.parse(xmlAfterParse,"",Parser.xmlParser());
		whitelist.addTags("?xml", "person", "name", "surname", "pesel", "product", "productname", "productprice");
		String xmlAfterParse = Jsoup.clean(fileToParse, whitelist);
		System.out.println(xmlAfterParse);
		
	}

Wszystko wygląda nienagannie i efekt końcowy jest taki

<person> 
 <name>
  Marcin
 </name> 
 <surname>
  Kowali
 </surname> 
 <pesel>
  123456789
 </pesel> 
</person> 
<product> 
 <productname>
  Persil
 </productname> 
 <productprice>
  14.99
 </productprice> 
</product>

Po zapisaniu sparsowanego stringa do pliku zauważyłem że JSoup nie uwzględnił xmlowej adnotacji <?xml version="1.0" encoding="UTF-8" standalone="true"?>, w wyniku czego plik nie jest możliwy do poprawnego wyświetlenia w przeglądarce.
Teraz moje dwa pytania:
Jakiego parsera bądź metody użyć, żeby ten tag xmlowy został uwzględniony przez parser ?

Za wszelką konstruktywną krytykę jak i podpowiedzi dziękuję.

Ps. dodam jeszcze od siebie, że testowałem metodę doc.select("p").unwrap, jednak to również nie pomogło

0

Czy zadanie można uprościć do:

  • usuń ze stringa wszystkie wystąpienia ```
    "" "" "
    "
0

Nie do końca rozumiem co masz na myśli uprościć ? Chodzi ci o zdefiniowanie regexa i usunięcie nim ze stringa wybranych słów ? Tak myślę że można je uprosicic jeżeli wywali <spana> z całą zawartością zdefiniowana w tym tagu.

0

Hej problem rozwiązany. Jeśli ktoś borykałby się z tym samym problemem to oczywście odsyłam do dokumentacji :), bo ja zamiast Documenta to czepiłem się Parsera. A samo rozwiązanie sprowadziło się do dwóch linijek kodu.

		doc.outputSettings().syntax(Syntax.xml);
		doc.charset(Charset.forName("utf-8"));

1 użytkowników online, w tym zalogowanych: 0, gości: 1