Thank for the quick answer, Michael. Will look for a workaround then.
Patrik
Am 09.12.2016 um 14:13 schrieb Michael Glavassevich:
Not user friendly, but working as designed. No prefix is defined for
attribute default values (see schema spec here [1]).
Some of the more recent XML serialization APIs (LSSerializer /
XMLStreamWriter) are more namespace-aware and have the ability to fix
up namespaces during serialization.
Thanks.
[1] https://www.w3.org/TR/xmlschema-1/#sic-attrDefault
Michael Glavassevich
XML Technologies and WAS Development
IBM Toronto Lab
E-mail: mrgla...@ca.ibm.com
E-mail: mrgla...@apache.org
Patrik Stellmann <pat...@volleynet.de> wrote on 12/09/2016 04:09:46 AM:
> Hi,
>
> I'm using org.apache.xerces.parsers.SAXParser and when parsing a file
> with assigned XSD the added default attributes are missing the
namespace
> prefix.
>
> The attribute that I have set explicitly is serialized correctly. Ths,
> I'm pretty sure it is a parser issue.
>
> I've added a minimal sample below.
>
> Is this a bug or is there any additional feature I have to activate?
>
> Thanks and regards,
> Patrik
>
> ------------------------------------
> java-code:
>
> import java.io.File;
> import java.io.FileOutputStream;
>
> import javax.xml.transform.Result;
> import javax.xml.transform.TransformerFactory;
> import javax.xml.transform.sax.SAXTransformerFactory;
> import javax.xml.transform.sax.TransformerHandler;
> import javax.xml.transform.stream.StreamResult;
>
> import org.apache.xerces.parsers.SAXParser;
> import org.xml.sax.InputSource;
> import org.xml.sax.XMLReader;
>
> public class ParserTest {
>
> public static void main (String[] args) {
> try {
> final File inputFile = new File("input.xml");
> final File outputFile = new File("output.xml");
>
> final TransformerFactory tf =
> TransformerFactory.newInstance();
> final SAXTransformerFactory stf =
(SAXTransformerFactory) tf;
>
> final TransformerHandler serializer =
> stf.newTransformerHandler();
>
> XMLReader xmlSource = new SAXParser();
>
>
xmlSource.setFeature("http://apache.org/xml/features/validation/schema",
> true);
>
> Result out = new StreamResult(new
> FileOutputStream(outputFile));
> serializer.setResult(out);
> xmlSource.setContentHandler(serializer);
> xmlSource.parse(new
> InputSource(inputFile.toURI().toString()));
> System.out.println("Done!");
> } catch (Exception e) {
> System.err.println(e.getMessage());
> }
> }
> }
>
> ------------------------------------
> input.xml:
> <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:noNamespaceSchemaLocation="schema.xsd"
> xmlns:ns="http://www.example.org/namespace" ns:attr1="test1"/>
>
> ------------------------------------
> schema.xsd:
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
> xmlns:ns="http://www.example.org/namespace"
> elementFormDefault="qualified">
> <xs:import namespace="http://www.example.org/namespace"
> schemaLocation="namespace.xsd"/>
> <xs:element name="root">
> <xs:complexType>
> <xs:attribute ref="ns:attr1" default="default1"/>
> <xs:attribute ref="ns:attr2" default="default2"/>
> </xs:complexType>
> </xs:element>
> </xs:schema>
>
> ------------------------------------
> namespace.xsd:
> <xs:schema targetNamespace="http://www.example.org/namespace"
> xmlns:xs="http://www.w3.org/2001/XMLSchema">
> <xs:attribute name="attr1"/>
> <xs:attribute name="attr2"/>
> </xs:schema>
>
> ------------------------------------
> generated output.xml:
> <root xsi:noNamespaceSchemaLocation="schema.xsd" ns:attr1="test1"
> attr2="default2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:ns="http://www.example.org/namespace"/>
>
> (note the missing "ns:" before attr2)
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: j-users-unsubscr...@xerces.apache.org
> For additional commands, e-mail: j-users-h...@xerces.apache.org