XML & python3

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Felix Eckert
User
Beiträge: 31
Registriert: Samstag 10. Juni 2017, 10:53

Hallo,
ich möchte gerne XML in python verwenden und es in eine Funktion speichern,
ich habe ein gutes tutorial gefunden doch leider funktioniert es in der Funktion nicht außerhalb allerdings ebenfalls nicht,
wenn es hilft hir der Code:

Code: Alles auswählen

def open_xml():
    global adress_file, full_adress_file, dom, adresses
    adress_file = "adresses.xml"
    full_adress_file = os.path.join("assets/bin/adresses.xml")
    dom = ET.parse(full_adress_file)
    adresses = dom.findall('adresses/NAMES')
Ich kriege allerdings immer folgende Fehler Meldung:
def open_xml():
global adress_file, full_adress_file, dom, adresses
adress_file = "adresses.xml"
full_adress_file = os.path.join("assets/bin/adresses.xml")
dom = ET.parse(full_adress_file)
adresses = dom.findall('adresses/FELIX')
Kann mir da irgendwer helfen?
Ps: Ich bin kein Fan von JSON
Zuletzt geändert von Anonymous am Sonntag 13. August 2017, 13:03, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist keine Fehlermeldung. Und der Code ist recht verwirrend. full_address_file ist kein voller Pfad, sondern relativ. Das es gleichzeitig global ist, ist ein Fehler. So wie all die anderen Variablen, die so wie es aussieht besser Lokal wären. address_file benutzt du gar nicht.

Fan ist man üblicherweise von Vereinen. Für technologische Entscheidungen sollte man schon ein paar mehr Gründe als die Geburtsstadt haben. JSON ist einfacher zu benutzen als XML, weil es eine natürliche Abbildung auf Python-eigene Datenstrukturn darstellt. Das kannst du dir natürlich auch alles mühselig in XML selbst zusammenbauen. Man leidet ja auch als Fan seines Lieblingsvereins. Eine rationale Entscheidung ist das aber erstmal nicht.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Ergänzend noch: wenn obiger Code aus besagtem Tutorial stammt, so ist dieses kein gutes. Im Gegenteil.
Felix Eckert
User
Beiträge: 31
Registriert: Samstag 10. Juni 2017, 10:53

Ich habe das Falsche geschrieben bei der Fehler-Meldung hier ist die Fehler Meldung:
Traceback (most recent call last):
File "/Users/felix/Documents/test.py", line 11, in <module>
open_xml()
File "/Users/felix/Documents/test.py", line 8, in open_xml
dom = ET.parse(full_adress_file)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/xml/etree/ElementTree.py", line 1196, in parse
tree.parse(source, parser)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/xml/etree/ElementTree.py", line 597, in parse
self._root = parser._parse_whole(source)
File "<string>", line None
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 2
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dein XML ist nicht korrekt. Wie sieht das aus?
BlackJack

@Felix Eckert: Dann ist die XML-Datei anscheinend kein XML. Und zwar ist das dem Parser schon in Zeile 1, Spalte 2 klar.
Felix Eckert
User
Beiträge: 31
Registriert: Samstag 10. Juni 2017, 10:53

__deets__ hat geschrieben:Dein XML ist nicht korrekt. Wie sieht das aus?
Hier ist das XML:

Code: Alles auswählen

<?xml version=1.0 ?>
<Teststrings>
 <Teststring1>
   Hallo Welt !
 </Teststring1>

</Teststrings>
So bin ich es von Java gewöhnt, ist es in python anders?
Zuletzt geändert von Anonymous am Montag 14. August 2017, 10:43, insgesamt 1-mal geändert.
Grund: Quelltext in Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@Felix Eckert: das ist kein XML. Und das wird Dir Dein Java-XML-Parser genauso sagen. Wobei der eigentliche Fehler erst in Zeile 1 Spalte 15 auftritt.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Felix Eckert hat geschrieben: So bin ich es von Java gewöhnt, ist es in python anders?
XML ist XML. Die Programmiersprache ist egal. Und auch Java wird dir einen Fehler schmeißen, weil dein XML nicht Standard konform ist.
BlackJack

Folgendes Java-Programm:
[codebox=java5 file=Unbenannt.java]package de.python_forum.blackjack;

import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.nio.file.Path;
import java.nio.file.Paths;

public final class Main {

private Main() {}

public static void main(String... args) throws FileNotFoundException, XPathExpressionException {
final Path path = Paths.get(System.getProperty("user.home"), "test.xml");
final XPath xPath = XPathFactory.newInstance().newXPath();
final InputSource source = new InputSource(new FileInputStream(path.toFile()));
final NodeList result =
(NodeList) xPath.evaluate("adresses/NAMES", source, XPathConstants.NODESET);
}
}[/code]
Führt zu dieser Ausnahme mit der XML-Datei:
[codebox=text file=Unbenannt.txt]Exception in thread "main" org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 15; The value following "version" in the XML declaration must be a quoted string.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:466)
at de.python_forum.blackjack.Main.main(Main.java:24)
--------------- linked to ------------------
javax.xml.xpath.XPathExpressionException: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 15; The value following "version" in the XML declaration must be a quoted string.
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:471)
at de.python_forum.blackjack.Main.main(Main.java:24)
Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 15; The value following "version" in the XML declaration must be a quoted string.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:466)
... 1 more[/code]
Felix Eckert
User
Beiträge: 31
Registriert: Samstag 10. Juni 2017, 10:53

Sirius3 hat geschrieben:@Felix Eckert: das ist kein XML. Und das wird Dir Dein Java-XML-Parser genauso sagen. Wobei der eigentliche Fehler erst in Zeile 1 Spalte 15 auftritt.
Jup habe ihn gefunden!
Antworten