Parsowanie plikow XML

Odpowiedz Nowy wątek
2017-04-07 14:19
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

edytowany 10x, ostatnio: olekxd, 2017-04-11 09:26

Pozostało 580 znaków

2017-04-07 18:15
0

Czy zadanie można uprościć do:

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

edytowany 1x, ostatnio: matt_z, 2017-04-07 18:15

Pozostało 580 znaków

2017-04-08 13:28
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.

edytowany 1x, ostatnio: olekxd, 2017-04-08 13:29

Pozostało 580 znaków

2017-04-10 08:50
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"));

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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