Zum Inhalt springen

Java XML Parser


Der_Lampe

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...