Der_Lampe Geschrieben 14. April 2011 Geschrieben 14. April 2011 Hallo zusammen, habe ein kleines Problem und zwar sollen XML Dateien eingelesen werden, zurzeit wird dies mit Castor erledigt, wenn in einer XML Datei aber HTML Tags enthalten sind funktioniert dies nicht. Das in Java enthaltene SAX scheint dies zwar zu können aber es dauert ewig bis die Datei geparst wurde. Nun suche ich eine Alternative dazu, welche schnell arbeitet und mir XML Dateien mit HTML-Tags als Inhalt parst. Jemand ne Ahnung was ich da am besten nutzen kann? LG Der_Lampe Zitieren
Sporticus Geschrieben 14. April 2011 Geschrieben 14. April 2011 hi, schau dir mal den Link an. Vielleicht hilft der dir weiter. Zitieren
flashpixx Geschrieben 14. April 2011 Geschrieben 14. April 2011 HTML != XML Man kann HTML nur dann als XML parsen, sofern Du sicher gestellt hast, dass es sich um XHTML Daten handelt Zitieren
Der_Lampe Geschrieben 14. April 2011 Autor Geschrieben 14. April 2011 @Sporticus: ich werd mal reinschauen danke schonmal @Flashpixx: Es wäre möglich auch XHTML zu verwenden, ist es dann den auch noch möglich normale XML Dateien wie auch XHTML Dateien einzulesen? Wenn ja wie? Zitieren
Der_Lampe Geschrieben 14. April 2011 Autor Geschrieben 14. April 2011 Wenn ich also z.B. solch eine XHTML Datei habe und diese parsen will... <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd"> <Auftrag Nummer="1" Basissprache="2" Zielsprache="3" Erledigt="JJJJ"> <Begriff Nummer="1" MaximaleLaenge="1"> <Basis><br /> <p>fetter Text mit nur einem <strong>fetten</strong> Wort</p> <em>kursiv</em> und <u>unterstrichen</u> und <strike>durchgestrichen</strike> <p>normale Schrift</p> <h1>Überschrift 1</h1> <h2>Überschrift 2</h2> <p>normale Schrift</p> <hr /> <ul> <li>Bulletpoint 1</li> <li>Bulletpoint 2</li> </ul> </Basis> </Begriff> </Auftrag> läuft dies mit meinem Castor total schief weil der die HTML/XHTML Tags als XML Tags interpretiert Zitieren
flashpixx Geschrieben 14. April 2011 Geschrieben 14. April 2011 läuft dies mit meinem Castor total schief weil der die HTML/XHTML Tags als XML Tags interpretiert Also wenn Du versuchst die Code als HTML und als XML zu verarbeiten, dann wird das in diese Form fehlschlagen, denn es ist kein HTML und ein XML entsprechend der Spezifikation, die Du via DTD angibst ist es auch nicht. Zitieren
Der_Lampe Geschrieben 14. April 2011 Autor Geschrieben 14. April 2011 also ich habe das ganze so vor, dass am Ende in einer Klasse ein Objekt "Basis" existiert dass den Inhalt <br /> <p>fetter Text mit nur einem <strong>fetten</strong> Wort</p> <em>kursiv</em> und <u>unterstrichen</u> und <strike>durchgestrichen</strike> <p>normale Schrift</p> <h1>Überschrift 1</h1> <h2>Überschrift 2</h2> <p>normale Schrift</p> <hr /> <ul> <li>Bulletpoint 1</li> <li>Bulletpoint 2</li> </ul> hat...so die Theorie...ist das überhaupt so möglich? Zitieren
flashpixx Geschrieben 14. April 2011 Geschrieben 14. April 2011 Möglich ist das schon. Aber Du musst eben entweder die Spezifikation von XML Strict einhalten und eben kein halbes HTML Dokument verarbeiten, dann ist es normal, dass der Parser eben Fehler produziert. Oder Du definierst Dir Dein eigenes Format (ich würde zu einem XML Schema raten) und transformierst es z.B. via XSLT in das gewünschte Ausgabeformat. Zitieren
Der_Lampe Geschrieben 14. April 2011 Autor Geschrieben 14. April 2011 Also, ich habe folgende XSD Datei: <?xml version="1.0" encoding="UTF-8"?> <!--W3C Schema generated by XML Spy v4.1 U (http://www.xmlspy.com)--> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="Auftrag"> <xs:complexType> <xs:sequence> <xs:element name="Begriff" type="BegriffType" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="Nummer" type="xs:string" use="required"/> <xs:attribute name="Basissprache" type="xs:string" use="required"/> <xs:attribute name="Zielsprache" type="xs:string" use="required"/> <xs:attribute name="Zieltermin" type="xs:string" use="required"/> <xs:attribute name="BeschreibungUebersetzen" use="required"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="0"/> <xs:enumeration value="1"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="Erledigt" use="required"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="JJJJ"/> <xs:enumeration value="NNNN"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType> </xs:element> <xs:element name="Basis" type="xs:string"/> <xs:element name="BasisBeschreibung" type="xs:string"/> <xs:complexType name="BegriffType"> <xs:sequence> <xs:element ref="Basis"/> <xs:element ref="BasisBeschreibung"/> <xs:element ref="Uebersetzung"/> <xs:element ref="UebersetzungBeschreibung"/> </xs:sequence> <xs:attribute name="Nummer" type="xs:string" use="required"/> <xs:attribute name="MaximaleLaenge" type="xs:string" use="required"/> </xs:complexType> <xs:element name="Uebersetzung" type="xs:string"/> <xs:element name="UebersetzungBeschreibung" type="xs:string"/> </xs:schema> um meine XML-Datei einzulesen: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd"> <Auftrag Nummer="1" Basissprache="2" Zielsprache="3" Zieltermin="4" BeschreibungUebersetzen="0" Erledigt="JJJJ"> <Begriff Nummer="1" MaximaleLaenge="1"> <Basis><br /> <p>fetter Text mit nur einem <strong>fetten</strong> Wort und noch ein Text mit fett m <strong>itt</strong>en im Wort</p> <p>das gleiche mit <em>kursiv</em> und <u>unterstrichen</u> und <strike>durchgestrichen</strike> / ku <em>rs</em>iv, un-te <u>rstr</u>ichen und durc <strike>hge</strike>strichen mitten im Wort</p> <p>normale Schrift</p> <h1>Überschrift 1</h1> <h2>Überschrift 2</h2> <p>normale Schrift</p> <p>und noch <span style="color: rgb(255, 0, 0);">farbig</span> und farbig mitten im W <span sty-le="color: rgb(0, 255, 0);">o</span>rt</p> <p>Linie</p> <hr /> <ol> <li>Aufzählung 1</li> <li>Aufzählung 2</li> <li>Aufzählung 3</li> </ol> <ul> <li>Bulletpoint 1</li> <li>Bulletpoint 2</li> <li>Bulletpoint 3</li> </ul> </Basis> <BasisBeschreibung></BasisBeschreibung> <Uebersetzung></Uebersetzung> <UebersetzungBeschreibung></UebersetzungBeschreibung> </Begriff> </Auftrag> mit welchem Parser kann ich dies jetzt ordnungsgemäß parsen? Zitieren
flashpixx Geschrieben 14. April 2011 Geschrieben 14. April 2011 Wenn Du jetzt nur die Daten aus der XML anhand des Schemas verarbeiten willst, würde ich zu Jax greifen und via Mashalling die Daten aus der Klasse parsen. Jax kann anhand der Schemadatei Java Klassen erstellen, die Du direkt verwenden kannst. Ansonsten kannst Du eben mit jedem XML Parser nun Deine Datenstruktur auch händisch verarbeiten Zitieren
Der_Lampe Geschrieben 14. April 2011 Autor Geschrieben 14. April 2011 also ich habe das eben mal mit XPath ausprobiert und der verschluckt mir sämtliche XHTML Tags ich probiers mal mit Jax, Rückmeldung geb ich auf jeden Fall Auf jeden Fall schonmal vielen Dank für deine Hilfe Zitieren
Der_Lampe Geschrieben 15. April 2011 Autor Geschrieben 15. April 2011 OK, funktioniert prima muss jetzt nur noch fix die Geschichte mit dem XSD einbauen aber das dürfte ich allein hinbekommen, vielen Dank flashpixx!! Zitieren
Der_Lampe Geschrieben 15. April 2011 Autor Geschrieben 15. April 2011 OK, jetzt hab ich wieder nen Problem und finde keine Lösung, habe per xjc Klassen für meine XML Datei erstellt, und wenn ich jetzt versuche eine XML Datei(die aus der ich die XSD Datei erstellt habe) zu parsen bekomme ich folgende Fehlermeldung: (egal was unter Basis steht, auch bei keinem Inhalt oder nur mit einem Wort) javax.xml.bind.UnmarshalException - with linked exception: [org.xml.sax.SAXParseException: cvc-type.3.1.2: Element 'Basis' is a simple type, so it must have no element information item [children].] at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:315) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(UnmarshallerImpl.java:503) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:204) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:173) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:142) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:151) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:169) at JAXBTest.RoomMarshallerXSD.main(RoomMarshallerXSD.java:37) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90) Caused by: org.xml.sax.SAXParseException: cvc-type.3.1.2: Element 'Basis' is a simple type, so it must have no element information item [children]. at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195) at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318) at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(XMLSchemaValidator.java:417) at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(XMLSchemaValidator.java:3182) at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.elementLocallyValidType(XMLSchemaValidator.java:3087) at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.processElementContent(XMLSchemaValidator.java:3007) at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleEndElement(XMLSchemaValidator.java:2150) at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.endElement(XMLSchemaValidator.java:818) at com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorHandlerImpl.endElement(ValidatorHandlerImpl.java:563) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.ValidatingUnmarshaller.endElement(ValidatingUnmarshaller.java:83) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.endElement(SAXConnector.java:145) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601) at com.sun.org.apache.xerces.internal.impl.dtd.XMLNSDTDValidator.endNamespaceScope(XMLNSDTDValidator.java:263) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDValidator.java:2028) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endElement(XMLDTDValidator.java:901) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2938) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:200) ... 11 more Zitieren
Der_Lampe Geschrieben 15. April 2011 Autor Geschrieben 15. April 2011 (bearbeitet) halt, mein Fehler...das geschieht nur wenn in Basis XHTML Tags enthalten sind wenn ich die spitzen klammern als < bzw. > schreibe funktioniert das ganze wie gewollt, ist aber leider nicht zweckmäßig... Bearbeitet 15. April 2011 von Der_Lampe Zitieren
etreu Geschrieben 15. April 2011 Geschrieben 15. April 2011 <?xml version="1.0" encoding="UTF-8"?> <!-- ... --> <xs:element name="Basis" type="xs:string"/> Mach aus Basis einen ComplexType und schau dir mal xs:any an. Zitieren
Der_Lampe Geschrieben 15. April 2011 Autor Geschrieben 15. April 2011 also so? <xs:element name="Basis" > <xs:complexType> <xs:any minOccurs="0" maxOccurs="unbounded"/> </xs:complexType> </xs:element> kenne mich leider mit XML nicht wirklich gut aus und mit XSD noch weniger Zitieren
etreu Geschrieben 15. April 2011 Geschrieben 15. April 2011 XML Schema Part 1: Structures Second Edition <xs:element name="Basis" mixed="true"> <xs:complexType> <xs:any minOccurs="0" maxOccurs="unbounded" /> </xs:complexType> </xs:element> So würde ich das mal probieren. Zitieren
Der_Lampe Geschrieben 18. April 2011 Autor Geschrieben 18. April 2011 wenn ich aus der Schema Datei nun versuche Klassen zu generieren bekomme ich folgende Fehlermeldungen: parsing a schema... [ERROR] s4s-att-not-allowed: Attribute 'mixed' cannot appear in element 'element'. line 32 of file:/.../schema.xsd [ERROR] s4s-elt-invalid-content.1: The content of '#AnonType_Basis' is invalid. Element 'any' is in valid, misplaced, or occurs too often. line 34 of file:/.../schema.xsd Failed to parse a schema. Zitieren
flashpixx Geschrieben 18. April 2011 Geschrieben 18. April 2011 Die Fehlermeldung gibt Dir an, was falsch ist. Zitieren
Der_Lampe Geschrieben 18. April 2011 Autor Geschrieben 18. April 2011 parsing a schema... [ERROR] s4s-att-not-allowed: Attribute 'mixed' cannot appear in element 'element'. line 32 of file:/.../schema.xsd diese hier bekomme ich auch einfach weg, wenn ich das "mixed" rauslösche aber die andere verstehe ich nicht: [ERROR] s4s-elt-invalid-content.1: The content of '#AnonType_Basis' is invalid. Element 'any' is in valid, misplaced, or occurs too often. line 34 of file:/.../schema.xsd Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.