2016-07-25 8 views
0

Dies ist ein XML-Dokument (der Satz und Leerzeichen vor der XML-Deklaration und XSLT-Verarbeitungsanweisung ist Teil des Eingangs):Fehler bei der Analyse von XML: Content nicht in Prolog erlaubt ist

This XML file does not appear to have any style information associated with it. The document tree is shown below. 


    <?xml version="1.0" encoding="UTF-8"?> 
    <?xml-stylesheet type="text/xsl" href="/3.0/style/exchange.xsl"?> 
     <mts:meta name="elapsed-time" value="18" /> 
     <exchange-documents> 
     <exchange-document country="US" number="8049504"> 
     .... 
     .... 
     .... 

     </exchange-document> 
     </exchange-documents> 

Ich bin Parsen der XML und Verwendung von XPath. In den meisten der XML-Dateien enthält die erste Zeile einen Text oder Leerzeichen (die oben xml beziehen)

Ohne diesen führenden Text, es parst erfolgreich, aber wenn irgendein Text erscheint erzeugt den folgenden Fehler:

--- exec-maven-plugin:1.2.1:exec (default-cli) @ XMLHandling --- 

[Fatal Error] :1:1: Content is not allowed in prolog.

Wie kann ich das umgehen?

Der Code, den ich verwende:

public static void main(String[] args) throws ParseException { 

     String filePath = "D:/newxml.xml"; 

     try { 
      FileInputStream file = new FileInputStream(new File(filePath)); 
      DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder builder = builderFactory.newDocumentBuilder(); 
      Document xmlDocument = builder.parse(file); 
      XPath xPath = XPathFactory.newInstance().newXPath(); 

      String pubOrPatentNumber = xPath.compile("//preference").evaluate(xmlDocument); 
      ... 
      ... 
      } 
      } 

Ich kann den Text manuell entfernen und ausführen, aber ich brauche diese automatisch die Eingabe aufzuräumen in meinem Code zu lösen.

+1

es höchstwahrscheinlich ist Byte Order Kennzeichen. Siehe mögliche Lösung hier: http://stackoverflow.com/questions/21891578/removing-bom-characters-using-java –

+1

Auf der Code-Ebene könnten Sie die String-Bibliothek Funktionen verwenden, dh, suchen Sie nach dem ersten Vorkommen von "< " In der Eingabezeichenfolge, die das Dokument enthält, nehmen Sie den Teilstring, der hier beginnt, und parsen Sie ihn dann. Ich würde jedoch empfehlen, wegen der Wohlgeformtheitsfehler vorsichtig vorzugehen. Es ist eine bewährte Methode, sicherzustellen, dass XML-Dokumente immer gut formatiert sind, um solche Probleme zu vermeiden. Ich hoffe das hilft! –

Antwort

0

Es gibt zwei Probleme in dem Dokument aus einer wohlgeformten Perspektive.

  1. Es ist nicht erlaubt, zwei Elemente auf oberster Ebene zu haben (mts: meta, exchange-documents).

  2. Das Präfix mts ist nicht deklariert.

Dieses geänderte Dokument wohlgeformt ist (aber man muss den Namespace-URI für mts anzupassen und den entsprechenden Namen für das Verpackungselement zu holen):

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="/3.0/style/exchange.xsl"?> 
<root> 
    <mts:meta xmlns:mts="http://www.example.com" name="elapsed-time" value="18" /> 
    <exchange-documents> 
     <exchange-document country="US" number="8049504"> 
      .... 
      .... 
      .... 
     </exchange-document> 
    </exchange-documents> 
</root> 
+0

Die Xml-Datei kommt von http, dh ich analysiere das XML im laufenden Betrieb, treffe die URL, erstelle eine Verbindung und so weiter, jedes Xml sollte die erste Zeile sein. "Diese XML-Datei scheint keine Stilinformationen zu enthalten mit ihm. Der Dokumentenbaum ist unten gezeigt. " wegen der ersten Zeile ich bin nicht in der Lage, das Dokument zu analysieren, sowie nicht in der Lage, das XML zu aktualisieren – Prabu

+0

aktualisieren Sie die XML-Datei in meiner Frage – Prabu

+1

Vielen Dank für den Rückfall, Prabu und tut mir leid. Ich dachte, es wäre ein Copy-and-Paste-Artefakt. Dann ist das ein weiteres Problem. Wenn es sich um ein Dokument handelt, das über HTTP abgerufen wird, bedeutet dies auch, dass auf dem Server, der dieses XML bereitstellt, etwas nicht stimmt, es sei denn, es handelt sich möglicherweise um ein XML-Fragment und nicht um ein Dokument. Wird dieser Satz von einem Browser angezeigt, da Browser bei der Anzeige von XML in der Regel Schnickschnack hinzufügen? Wenn ja, können Sie versuchen, den tatsächlichen Quellcode zu betrachten und zu teilen? In Browsern können Sie normalerweise das rohe XML anzeigen. –

Verwandte Themen