Parsen von XML ohne Anführungszeichen in Scala

  • Ich versuche, einen schlecht generierten XML-Code mit Scala zu analysieren, der so aussieht:

     <contextfile concordance=brown>
    <context filename=br-a01 paras=yes>
    <p pnum=1>
    <s snum=1> 
    <wf cmd=ignore pos=DT>The</wf>
    </s>
    </p>
    ...
     

    Es ist gut strukturiert, aber wie Sie sehen, gibt es keine Anführungszeichen um einen der Attribube-Werte. Durch einfaches Öffnen der Datei mit dem folgenden Scala-Snippet wird ein nicht so überraschender Fehler ausgelöst:

     val semCor = XML.loadFile(args(0)) 
     

    wirft

     org.xml.sax.SAXParseException: Open quote is expected for attribute "{1}" associated with an  element type  "concordance".
     

    Ich würde gerne wissen, wie, wenn es überhaupt möglich ist Richten Sie den scala xml-Parser so ein, dass diese Eingabe korrekt analysiert wird, als ob die Attributwerte in Anführungszeichen gesetzt wurden.

    Vielen Dank für Ihre Vorschläge!

    22 November 2011
    fozziethebeat
3 answers
  • Es ist nicht möglich, den Parser in diesem Umfang in Scala zu konfigurieren. Da Ihr XML jedoch fehlerhaft ist, können Sie eine aufgeräumte HTML-Bibliothek wie JSoup oder TagSoup , um Ihre XML-Datei zunächst aufzuräumen und sie anschließend mit Scala-XML zu analysieren. Oder holen Sie sich die gewünschten Daten direkt aus der XMl mit JSoup.

    22 November 2011
    Matthew Farwell
  • Warum bezeichnen Sie das als XML? Es ist nicht Sie können ein Scala-Programm auch als C # -Programm bezeichnen. Kein XML-Parser macht überhaupt einen Sinn. Sie verwenden ein vollständig proprietäres Format für den Datenaustausch, und Sie haben zwei Möglichkeiten: Wechseln Sie stattdessen zur Verwendung von XML oder schreiben Sie einen vollständig proprietären Parser

    22 November 2011
    Michael Kay
  • Der Parser kann nicht konfiguriert werden. Ihr Parser akzeptiert kein "nicht wohlgeformtes" XML. Vielleicht sollten Sie einen ersten Durchlauf in Betracht ziehen, um die Zitate hinzuzufügen. Im Allgemeinen ist es nicht möglich zu wissen, wie mit diesem Problem umgegangen werden soll. In bestimmten Fällen kann dies jedoch sehr einfach sein, z. oder "& lt;" Zeichen.

    22 November 2011
    Vincent Biragnet