Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

@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?

Geschrieben

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

Geschrieben

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.

Geschrieben

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?

Geschrieben

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.

Geschrieben

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?

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben (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 von Der_Lampe
Geschrieben

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

Geschrieben

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.

Geschrieben

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

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...