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