2016-04-27 8 views
1

Ich versuche, eine Engine zu erstellen, die mehrere Verweise auf RSS-Feeds speichert, um sie selbst zu kompilieren, um dann eigene benutzerdefinierte Feeds zu erstellen. Ich speichere die Feeddaten in einer XML-Datei, lese sie dann in meiner Java-Engine und speichere eine URL als einfache Zeichenfolge.XML-Datei in Java mit einem Sonderzeichen lesen

Hier ist meine XML-Datei:

<Feeds> 
<item> 
    <name>Example-Name</name> 
    <url>http://someurl.com/process.php?appuser=[USER]&auth=[KEY]</url> 
    <frequency>5</frequency> 
</item> 
</Feeds> 

ich diese Datei mit diesem zu lesen:

try { 
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dBuilder; 

     dBuilder = dbFactory.newDocumentBuilder(); 
     Document doc = dBuilder.parse(xmlFile); 
     doc.getDocumentElement().normalize(); 

     NodeList list = doc.getElementsByTagName("item"); 

     for (int i = 0; i < list.getLength(); i++) { 
      Node n = list.item(i); 
      Element e = (Element) n; 
      String fn = e.getElementsByTagName("name").item(0).getTextContent(); 
      String fu = e.getElementsByTagName("url").item(0).getTextContent(); 
      int ff = Integer.parseInt(e.getElementsByTagName("frequency").item(0).getTextContent()); 
      addFeed(fn, fu, ff); 
     } 
    } catch (ParserConfigurationException e1) { 
     System.out.println("Parse Error"); 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (SAXException e1) { 
     System.out.println("SAX Error"); 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (IOException e1) { 
     System.out.println("IO Error"); 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

Und ich diesen Fehler:

[Fatal Error] Feeds.xml:15:75: The reference to entity "auth" must end with the ';' delimiter. 
SAX Error 
org.xml.sax.SAXParseException; systemId: file:/C:/Feed%20Engine/Feeds.xml; lineNumber: 15; columnNumber: 75; The reference to entity "auth" must end with the ';' delimiter. 
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source) 
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source) 
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source) 
at main.FeedFetcher.<init>(FeedFetcher.java:28) 
at main.FEMain.main(FEMain.java:10) 

Letztlich scheint es, wenn Beim Lesen der XML-Datei wird "auth" als Schlüsselwort ausgewählt. Gibt es eine Möglichkeit, ich es in der XML-Datei formatieren oder es anders analysieren, so dass ich den Fehler nicht erhalte?

Antwort

1

& ist ein Sonderzeichen in XML und steht für den Beginn einer Zeichenreferenz. Wenn Sie eine Ampersand verwenden möchten, müssen Sie auf sie verweisen mit &amp;

Daher XML Sie Datei wie folgt aussehen sollte:

<Feeds> 
<item> 
    <name>Example-Name</name> 
    <url>http://someurl.com/process.php?appuser=[USER]&amp;auth=[KEY]</url> 
    <frequency>5</frequency> 
</item> 
</Feeds> 
+0

Dank! Das hat definitiv den Trick gemacht. Ist mir nicht ganz bewusst, dass es versucht hat, den eigentlichen Inhalt zu analysieren. – Jonny