# XML Tag beim Einlesen manipulieren



## Guest (8. Dez 2008)

Hi zusammen,

ich lese eine XML-Datei per SAXParser, indem ich in einer Klasse das Interface ContentHandler(org.xml.sax.ContentHandler) implementiere (verkürzt):


```
public class MyContentHandlerImpl implements ContentHandler
{
    ContentHandler handler;

	public MyContentHandlerImpl(ContentHandler ch) {
		handler= ch;
	}

	public void startElement(String uri, String localName, String qName,
			Attributes atts) throws SAXException {
		
		handler.startElement(fixedUri, localName, qName, atts);
	}
	
	protected abstract String handleEmptyURI(String uri);

	public void characters(char[] ch, int start, int length)
			throws SAXException {
		handler.characters(ch, start, length);
	}

	public void endDocument() throws SAXException {
		handler.endDocument();
	}

	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		handler.endElement(uri, localName, qName);
	}

	public void endPrefixMapping(String prefix) throws SAXException {

	}

	public void ignorableWhitespace(char[] ch, int start, int length)

	}

	public void processingInstruction(String target, String data)

	}

	public void setDocumentLocator(Locator locator) {
	}

	public void skippedEntity(String name) throws SAXException {
	}

	public void startDocument() throws SAXException {
	}

	public void startPrefixMapping(String prefix, String uri)
	}
}
```

Das funktioniert soweit auch ganz gut. Allerdings kann es sein, dass ein Tag in der folgenden Ausführung reinkommt:

```
<TestTag>
<TESTTAG>
```

Diesbezüglich möchte ich also, dass jeder Tag, der gelesen wird, so gelesen wird, als wenn eine Großschreibung dieses Tags vorliegt.

In der startElement und endElement-Methode habe ich bereits versucht die entsprechenden Attribute auf toUpperCase() zu setzen. Leider ohne Erfolg:



```
javax.xml.bind.UnmarshalException: Namespace URIs and local names to the unmarshaller needs to be interned.
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:603)
	at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:244)
	at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:239)
	at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:114)
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1009)
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:446)
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:427)
	at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:137)
	at MyContentHandlerImpl .startElement(AbstractNamespaceFilterHandler.java:29)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
```

Kann mir wer vielleicht sagen, an welchen Schrauben ich noch drehen muss, um jeden XML-Tag in der Großschreibung zu erhalten?


----------



## gex (8. Dez 2008)

> reportUnexpectedChildElement


 - Hast du ein DTD oder XSD Schema dabei, das validiert wird,
oder sonst ein nicht valides XML?
UpperCase setzen dürfte ja eigentlich kein Problem sein, aber
komisch wenn er die Exception bereits beim startElement und nicht erst beim endElement wirft.

Bsp:

```
public void startElement(String uri, String localName, String qName,
         Attributes atts) throws SAXException {
      localName = localName.toUpperCase();
// bzw.
      qName = qName.toUpperCase();
      handler.startElement(fixedUri, localName, qName, atts);
   }
```

Dasselbe im endElement...


----------



## Guest (15. Dez 2008)

Das Problem ist, dass ich XML-Files verarbeiten muss, die eine komplette Großschreibung der Tags und der Attribute verwenden und einige hingegen in "Groß- und Kleinschreibung". Deswegen kann man ein XML-Schema da nicht drauf anwenden. 
Zur Zeit manipuliere ich das XML-File "per Hand", also mittels eines Streams. Die ganze Prozedur verbraucht einiges an Zeit.
Natürlich hatte bin ich bereits auf die Idee gekommen, die Strings in den einzelnen Methoden zu manipulieren, leider ohne Erfolg.


----------

