camel-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From acosent...@apache.org
Subject [camel] 01/09: Integrate camel-xj component
Date Fri, 06 Sep 2019 07:52:47 GMT
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit abd39c1b2f2a342b7873eff700602ae49f13685b
Author: Marc Giger <gigerstyle@gmx.ch>
AuthorDate: Sat Aug 10 18:53:27 2019 +0200

    Integrate camel-xj component
---
 apache-camel/pom.xml                               |  10 +
 apache-camel/src/main/descriptors/common-bin.xml   |   2 +
 bom/camel-bom/pom.xml                              |  10 +
 components/camel-xj/pom.xml                        |  68 ++
 .../camel/component/xj/JsonFileResultHandler.java  |  49 ++
 .../component/xj/JsonFileResultHandlerFactory.java |  39 ++
 .../component/xj/JsonSourceHandlerFactoryImpl.java |  83 +++
 .../component/xj/JsonStreamResultHandler.java      |  49 ++
 .../xj/JsonStreamResultHandlerFactory.java         |  35 +
 .../component/xj/JsonStringResultHandler.java      |  48 ++
 .../xj/JsonStringResultHandlerFactory.java         |  35 +
 .../camel/component/xj/JsonXmlStreamReader.java    | 605 +++++++++++++++++
 .../camel/component/xj/SourceHandlerFactory.java   |  26 +
 .../camel/component/xj/TransformDirection.java     |  22 +
 .../org/apache/camel/component/xj/XJComponent.java | 203 ++++++
 .../org/apache/camel/component/xj/XJConstants.java |  68 ++
 .../org/apache/camel/component/xj/XJEndpoint.java  | 527 +++++++++++++++
 .../camel/component/xj/XmlJsonStreamWriter.java    | 640 ++++++++++++++++++
 .../component/xj/XmlSourceHandlerFactoryImpl.java  | 150 +++++
 .../org/apache/camel/component/xj/XsltBuilder.java | 482 ++++++++++++++
 .../org/apache/camel/component/xj/XsltHelper.java  | 104 +++
 .../org/apache/camel/component/xj/identity.xsl     |  24 +
 .../camel/component/xj/J2XInputStreamTest.java     |  52 ++
 .../camel/component/xj/J2XOutputBytesTest.java     |  49 ++
 .../camel/component/xj/J2XOutputFileTest.java      |  52 ++
 .../camel/component/xj/J2XOutputIdentityTest.java  |  52 ++
 .../camel/component/xj/J2XOutputStringTest.java    |  49 ++
 .../component/xj/JsonXmlStreamReaderTest.java      |  78 +++
 .../camel/component/xj/X2JInputStreamTest.java     |  52 ++
 .../camel/component/xj/X2JOutputBytesTest.java     |  49 ++
 .../camel/component/xj/X2JOutputFileTest.java      |  52 ++
 .../camel/component/xj/X2JOutputIdentityTest.java  |  49 ++
 .../camel/component/xj/X2JOutputStringTest.java    |  49 ++
 .../org/apache/camel/component/xj/XJTestUtils.java | 160 +++++
 .../component/xj/XmlJsonStreamWriterTest.java      | 141 ++++
 .../camel-xj/src/test/resources/hellojson2xml.xsl  |  37 ++
 .../camel-xj/src/test/resources/helloxml2json.xsl  |  28 +
 .../src/test/resources/json2xml/test1.json         |  26 +
 .../camel-xj/src/test/resources/json2xml/test1.xml |  27 +
 .../src/test/resources/json2xml/test10.json        |  10 +
 .../src/test/resources/json2xml/test10.xml         |  11 +
 .../src/test/resources/json2xml/test11.json        |   3 +
 .../src/test/resources/json2xml/test11.xml         | 712 ++++++++++++++++++++
 .../src/test/resources/json2xml/test2.json         |  26 +
 .../camel-xj/src/test/resources/json2xml/test2.xml |  27 +
 .../src/test/resources/json2xml/test3.json         |  26 +
 .../camel-xj/src/test/resources/json2xml/test3.xml |  27 +
 .../src/test/resources/json2xml/test4.json         |  26 +
 .../camel-xj/src/test/resources/json2xml/test4.xml |  27 +
 .../src/test/resources/json2xml/test5.json         |  26 +
 .../camel-xj/src/test/resources/json2xml/test5.xml |  27 +
 .../src/test/resources/json2xml/test6.json         |  26 +
 .../camel-xj/src/test/resources/json2xml/test6.xml |  27 +
 .../src/test/resources/json2xml/test7.json         |  26 +
 .../camel-xj/src/test/resources/json2xml/test7.xml |  27 +
 .../src/test/resources/json2xml/test8.json         |  33 +
 .../camel-xj/src/test/resources/json2xml/test8.xml |  34 +
 .../src/test/resources/json2xml/test9.json         | 260 ++++++++
 .../camel-xj/src/test/resources/json2xml/test9.xml | 262 ++++++++
 .../camel-xj/src/test/resources/log4j2.properties  |  28 +
 .../src/test/resources/xml2json/test1.json         |  26 +
 .../camel-xj/src/test/resources/xml2json/test1.xml |  27 +
 .../src/test/resources/xml2json/test10.json        |  10 +
 .../src/test/resources/xml2json/test10.xml         |  11 +
 .../src/test/resources/xml2json/test11.json        |  10 +
 .../src/test/resources/xml2json/test11.xml         |  11 +
 .../src/test/resources/xml2json/test12.json        |  12 +
 .../src/test/resources/xml2json/test12.xml         |  13 +
 .../src/test/resources/xml2json/test13.json        |  14 +
 .../src/test/resources/xml2json/test13.xml         |  13 +
 .../src/test/resources/xml2json/test14.json        |  20 +
 .../src/test/resources/xml2json/test14.xml         |  13 +
 .../src/test/resources/xml2json/test15.json        |  12 +
 .../src/test/resources/xml2json/test15.xml         |  13 +
 .../src/test/resources/xml2json/test16.json        |   3 +
 .../src/test/resources/xml2json/test16.xml         | 713 +++++++++++++++++++++
 .../src/test/resources/xml2json/test17.json        |  29 +
 .../src/test/resources/xml2json/test17.xml         |  16 +
 .../src/test/resources/xml2json/test18.json        |  22 +
 .../src/test/resources/xml2json/test18.xml         |  15 +
 .../src/test/resources/xml2json/test19.json        |   2 +
 .../src/test/resources/xml2json/test19.xml         |   3 +
 .../src/test/resources/xml2json/test2.json         |  26 +
 .../camel-xj/src/test/resources/xml2json/test2.xml |  27 +
 .../src/test/resources/xml2json/test20.json        |   2 +
 .../src/test/resources/xml2json/test20.xml         |   3 +
 .../src/test/resources/xml2json/test21.json        |   2 +
 .../src/test/resources/xml2json/test21.xml         |   3 +
 .../src/test/resources/xml2json/test22.json        |   2 +
 .../src/test/resources/xml2json/test22.xml         |   2 +
 .../src/test/resources/xml2json/test23.json        |   5 +
 .../src/test/resources/xml2json/test23.xml         |   6 +
 .../src/test/resources/xml2json/test3.json         |  26 +
 .../camel-xj/src/test/resources/xml2json/test3.xml |  27 +
 .../src/test/resources/xml2json/test4.json         |  26 +
 .../camel-xj/src/test/resources/xml2json/test4.xml |  27 +
 .../src/test/resources/xml2json/test5.json         |  26 +
 .../camel-xj/src/test/resources/xml2json/test5.xml |  27 +
 .../src/test/resources/xml2json/test6.json         |  28 +
 .../camel-xj/src/test/resources/xml2json/test6.xml |  27 +
 .../src/test/resources/xml2json/test7.json         |  26 +
 .../camel-xj/src/test/resources/xml2json/test7.xml |  27 +
 .../src/test/resources/xml2json/test8.json         |  33 +
 .../camel-xj/src/test/resources/xml2json/test8.xml |  33 +
 .../src/test/resources/xml2json/test9.json         | 231 +++++++
 .../camel-xj/src/test/resources/xml2json/test9.xml | 231 +++++++
 components/pom.xml                                 |   1 +
 components/readme.adoc                             |   3 +
 .../endpoint/dsl/XJEndpointBuilderFactory.java     | 549 ++++++++++++++++
 parent/pom.xml                                     |  10 +
 .../karaf/features/src/main/resources/features.xml |   6 +
 .../components-starter/camel-xj-starter/pom.xml    |  53 ++
 .../springboot/XJComponentAutoConfiguration.java   | 128 ++++
 .../xj/springboot/XJComponentConfiguration.java    | 167 +++++
 .../src/main/resources/META-INF/LICENSE.txt        | 203 ++++++
 .../src/main/resources/META-INF/NOTICE.txt         |  11 +
 .../src/main/resources/META-INF/spring.factories   |  19 +
 .../src/main/resources/META-INF/spring.provides    |  17 +
 platforms/spring-boot/components-starter/pom.xml   |   1 +
 .../camel-spring-boot-dependencies/pom.xml         |  10 +
 .../org/apache/camel/itest/karaf/CamelXjTest.java  |  33 +
 .../apache/camel/itest/springboot/CamelXjTest.java |  46 ++
 122 files changed, 9090 insertions(+)

diff --git a/apache-camel/pom.xml b/apache-camel/pom.xml
index 75d2faa..2593dcd 100644
--- a/apache-camel/pom.xml
+++ b/apache-camel/pom.xml
@@ -1603,6 +1603,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.camel</groupId>
+      <artifactId>camel-xj</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
       <artifactId>camel-xmlsecurity</artifactId>
       <version>${project.version}</version>
     </dependency>
@@ -3057,6 +3062,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.camel</groupId>
+      <artifactId>camel-xj-starter</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
       <artifactId>camel-xmlsecurity-starter</artifactId>
       <version>${project.version}</version>
     </dependency>
diff --git a/apache-camel/src/main/descriptors/common-bin.xml b/apache-camel/src/main/descriptors/common-bin.xml
index 5209374..edb9712 100644
--- a/apache-camel/src/main/descriptors/common-bin.xml
+++ b/apache-camel/src/main/descriptors/common-bin.xml
@@ -341,6 +341,7 @@
         <include>org.apache.camel:camel-websocket-jsr356</include>
         <include>org.apache.camel:camel-wordpress</include>
         <include>org.apache.camel:camel-xchange</include>
+        <include>org.apache.camel:camel-xj</include>
         <include>org.apache.camel:camel-xmlsecurity</include>
         <include>org.apache.camel:camel-xmpp</include>
         <include>org.apache.camel:camel-xpath</include>
@@ -671,6 +672,7 @@
         <include>org.apache.camel:camel-websocket-starter</include>
         <include>org.apache.camel:camel-wordpress-starter</include>
         <include>org.apache.camel:camel-xchange-starter</include>
+        <include>org.apache.camel:camel-xj-starter</include>
         <include>org.apache.camel:camel-xmlsecurity-starter</include>
         <include>org.apache.camel:camel-xmpp-starter</include>
         <include>org.apache.camel:camel-xpath-starter</include>
diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml
index ebd4cf9..2e8693e 100644
--- a/bom/camel-bom/pom.xml
+++ b/bom/camel-bom/pom.xml
@@ -3105,6 +3105,16 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-xj</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-xj-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-xmlsecurity</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/components/camel-xj/pom.xml b/components/camel-xj/pom.xml
new file mode 100644
index 0000000..3d593ff
--- /dev/null
+++ b/components/camel-xj/pom.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>components</artifactId>
+        <version>3.0.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>camel-xj</artifactId>
+    <packaging>jar</packaging>
+
+    <name>Camel :: XJ</name>
+    <description>Camel XJ component</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-xslt</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.skyscreamer</groupId>
+            <artifactId>jsonassert</artifactId>
+            <version>1.5.0</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.xmlunit</groupId>
+            <artifactId>xmlunit-core</artifactId>
+            <version>2.6.3</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonFileResultHandler.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonFileResultHandler.java
new file mode 100644
index 0000000..5d6f2c1
--- /dev/null
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonFileResultHandler.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xj;
+
+import com.fasterxml.jackson.core.JsonEncoding;
+import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.core.JsonGenerator;
+import org.apache.camel.Message;
+import org.apache.camel.component.xslt.ResultHandler;
+
+import javax.xml.transform.Result;
+import javax.xml.transform.stax.StAXResult;
+import java.io.File;
+
+public class JsonFileResultHandler implements ResultHandler {
+
+    private final File file;
+    private final Result result;
+
+    public JsonFileResultHandler(JsonFactory jsonFactory, File file) throws Exception {
+        this.file = file;
+        final JsonGenerator jsonGenerator = jsonFactory.createGenerator(this.file, JsonEncoding.UTF8);
+        this.result = new StAXResult(new XmlJsonStreamWriter(jsonGenerator));
+    }
+
+    @Override
+    public Result getResult() {
+        return this.result;
+    }
+
+    @Override
+    public void setBody(Message in) {
+        in.setBody(this.file);
+    }
+}
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonFileResultHandlerFactory.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonFileResultHandlerFactory.java
new file mode 100644
index 0000000..0b065ac
--- /dev/null
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonFileResultHandlerFactory.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xj;
+
+import com.fasterxml.jackson.core.JsonFactory;
+import org.apache.camel.Exchange;
+import org.apache.camel.component.xslt.ResultHandler;
+import org.apache.camel.component.xslt.ResultHandlerFactory;
+import org.apache.camel.support.ExchangeHelper;
+
+import java.io.File;
+
+public class JsonFileResultHandlerFactory implements ResultHandlerFactory {
+    private final JsonFactory jsonFactory;
+
+    public JsonFileResultHandlerFactory(JsonFactory jsonFactory) {
+        this.jsonFactory = jsonFactory;
+    }
+
+    @Override
+    public ResultHandler createResult(Exchange exchange) throws Exception {
+        final String fileName = ExchangeHelper.getMandatoryHeader(exchange, Exchange.XSLT_FILE_NAME, String.class);
+        return new JsonFileResultHandler(jsonFactory, new File(fileName));
+    }
+}
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonSourceHandlerFactoryImpl.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonSourceHandlerFactoryImpl.java
new file mode 100644
index 0000000..5959c86
--- /dev/null
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonSourceHandlerFactoryImpl.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xj;
+
+import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.core.JsonParser;
+import org.apache.camel.Exchange;
+import org.apache.camel.ExpectedBodyTypeException;
+
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.transform.Source;
+import javax.xml.transform.stax.StAXSource;
+import java.io.File;
+import java.io.InputStream;
+import java.io.Reader;
+
+public class JsonSourceHandlerFactoryImpl implements SourceHandlerFactory {
+
+    private JsonFactory jsonFactory;
+    private boolean isFailOnNullBody = true;
+
+    public JsonSourceHandlerFactoryImpl(JsonFactory jsonFactory) {
+        this.jsonFactory = jsonFactory;
+    }
+
+    public boolean isFailOnNullBody() {
+        return isFailOnNullBody;
+    }
+
+    public void setFailOnNullBody(boolean failOnNullBody) {
+        isFailOnNullBody = failOnNullBody;
+    }
+
+    @Override
+    public Source getSource(Exchange exchange) throws Exception {
+        Object body = exchange.getIn().getBody();
+
+        JsonParser jsonParser = null;
+        if (body instanceof File) {
+            jsonParser = jsonFactory.createParser((File) body);
+        } else if (body instanceof InputStream) {
+            jsonParser = jsonFactory.createParser((InputStream) body);
+        } else if (body instanceof Reader) {
+            jsonParser = jsonFactory.createParser((Reader) body);
+        } else if (body instanceof byte[]) {
+            jsonParser = jsonFactory.createParser((byte[]) body);
+        } else if (body instanceof String) {
+            jsonParser = jsonFactory.createParser((String) body);
+        }
+
+        if (jsonParser == null) {
+            final String bodyAsString = exchange.getContext().getTypeConverter().tryConvertTo(String.class, exchange, body);
+            if (bodyAsString != null) {
+                jsonParser = jsonFactory.createParser(bodyAsString);
+            }
+        }
+
+        if (jsonParser == null) {
+            if (isFailOnNullBody()) {
+                throw new ExpectedBodyTypeException(exchange, Source.class);
+            } else {
+                jsonParser = jsonFactory.createParser("{}");
+            }
+        }
+
+        final XMLStreamReader xmlStreamReader = new JsonXmlStreamReader(jsonParser);
+        return new StAXSource(xmlStreamReader);
+    }
+}
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonStreamResultHandler.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonStreamResultHandler.java
new file mode 100644
index 0000000..809e710
--- /dev/null
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonStreamResultHandler.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xj;
+
+import com.fasterxml.jackson.core.JsonEncoding;
+import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.core.JsonGenerator;
+import org.apache.camel.Message;
+import org.apache.camel.component.xslt.ResultHandler;
+
+import javax.xml.transform.Result;
+import javax.xml.transform.stax.StAXResult;
+import java.io.ByteArrayOutputStream;
+
+public class JsonStreamResultHandler implements ResultHandler {
+
+    private final ByteArrayOutputStream byteArrayOutputStream;
+    private final Result result;
+
+    public JsonStreamResultHandler(JsonFactory jsonFactory) throws Exception {
+        this.byteArrayOutputStream = new ByteArrayOutputStream();
+        final JsonGenerator jsonGenerator = jsonFactory.createGenerator(this.byteArrayOutputStream, JsonEncoding.UTF8);
+        this.result = new StAXResult(new XmlJsonStreamWriter(jsonGenerator));
+    }
+
+    @Override
+    public Result getResult() {
+        return this.result;
+    }
+
+    @Override
+    public void setBody(Message in) {
+        in.setBody(this.byteArrayOutputStream.toByteArray());
+    }
+}
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonStreamResultHandlerFactory.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonStreamResultHandlerFactory.java
new file mode 100644
index 0000000..f639086
--- /dev/null
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonStreamResultHandlerFactory.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xj;
+
+import com.fasterxml.jackson.core.JsonFactory;
+import org.apache.camel.Exchange;
+import org.apache.camel.component.xslt.ResultHandler;
+import org.apache.camel.component.xslt.ResultHandlerFactory;
+
+public class JsonStreamResultHandlerFactory implements ResultHandlerFactory {
+    private final JsonFactory jsonFactory;
+
+    public JsonStreamResultHandlerFactory(JsonFactory jsonFactory) {
+        this.jsonFactory = jsonFactory;
+    }
+
+    @Override
+    public ResultHandler createResult(Exchange exchange) throws Exception {
+        return new JsonStreamResultHandler(jsonFactory);
+    }
+}
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonStringResultHandler.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonStringResultHandler.java
new file mode 100644
index 0000000..61e12ea
--- /dev/null
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonStringResultHandler.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xj;
+
+import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.core.JsonGenerator;
+import org.apache.camel.Message;
+import org.apache.camel.component.xslt.ResultHandler;
+
+import javax.xml.transform.Result;
+import javax.xml.transform.stax.StAXResult;
+import java.io.StringWriter;
+
+public class JsonStringResultHandler implements ResultHandler {
+
+    private final StringWriter stringWriter;
+    private final Result result;
+
+    public JsonStringResultHandler(JsonFactory jsonFactory) throws Exception {
+        this.stringWriter = new StringWriter();
+        final JsonGenerator jsonGenerator = jsonFactory.createGenerator(this.stringWriter);
+        this.result = new StAXResult(new XmlJsonStreamWriter(jsonGenerator));
+    }
+
+    @Override
+    public Result getResult() {
+        return this.result;
+    }
+
+    @Override
+    public void setBody(Message in) {
+        in.setBody(this.stringWriter.toString());
+    }
+}
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonStringResultHandlerFactory.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonStringResultHandlerFactory.java
new file mode 100644
index 0000000..e2991fc
--- /dev/null
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonStringResultHandlerFactory.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xj;
+
+import com.fasterxml.jackson.core.JsonFactory;
+import org.apache.camel.Exchange;
+import org.apache.camel.component.xslt.ResultHandler;
+import org.apache.camel.component.xslt.ResultHandlerFactory;
+
+public class JsonStringResultHandlerFactory implements ResultHandlerFactory {
+    private final JsonFactory jsonFactory;
+
+    public JsonStringResultHandlerFactory(JsonFactory jsonFactory) {
+        this.jsonFactory = jsonFactory;
+    }
+
+    @Override
+    public ResultHandler createResult(Exchange exchange) throws Exception {
+        return new JsonStringResultHandler(jsonFactory);
+    }
+}
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonXmlStreamReader.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonXmlStreamReader.java
new file mode 100644
index 0000000..06106b5
--- /dev/null
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonXmlStreamReader.java
@@ -0,0 +1,605 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.xj;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonToken;
+
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.namespace.QName;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.events.XMLEvent;
+import java.io.IOException;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * XML Json bridge. Explicitly using XMLStreamReader and not XMLEventReader because saxon wants that.
+ */
+public class JsonXmlStreamReader implements XMLStreamReader {
+
+    private static final Location LOCATION = new Location() {
+        @Override
+        public int getLineNumber() {
+            return -1;
+        }
+
+        @Override
+        public int getColumnNumber() {
+            return -1;
+        }
+
+        @Override
+        public int getCharacterOffset() {
+            return -1;
+        }
+
+        @Override
+        public String getPublicId() {
+            return null;
+        }
+
+        @Override
+        public String getSystemId() {
+            return null;
+        }
+    };
+
+    private final JsonParser jsonParser;
+
+    private Deque<StackElement> tokenStack = new ArrayDeque<>();
+    private boolean eof = false;
+
+    public JsonXmlStreamReader(JsonParser jsonParser) {
+        this.jsonParser = jsonParser;
+    }
+
+    @Override
+    public Object getProperty(String name) throws IllegalArgumentException {
+        return null;
+    }
+
+    @Override
+    public int next() throws XMLStreamException {
+        try {
+            final StackElement previousElement = tokenStack.peek();
+            if (previousElement != null) {
+                switch (previousElement.jsonToken) {
+                    case VALUE_STRING:
+                    case VALUE_NUMBER_INT:
+                    case VALUE_NUMBER_FLOAT:
+                    case VALUE_NULL:
+                    case VALUE_TRUE:
+                    case VALUE_FALSE: {
+                        switch (previousElement.xmlEvent) {
+                            case XMLEvent.START_ELEMENT:
+                                previousElement.xmlEvent = XMLEvent.CHARACTERS;
+                                return XMLEvent.CHARACTERS;
+
+                            case XMLEvent.CHARACTERS:
+                                removeStackElement(previousElement.jsonToken);
+                                removeStackElement(JsonToken.FIELD_NAME);
+
+                                tokenStack.peek().xmlEvent = XMLEvent.END_ELEMENT;
+                                return XMLEvent.END_ELEMENT;
+
+                            default:
+                                throw new IllegalStateException("illegal state");
+                        }
+                    }
+                }
+            }
+
+            if (eof) {
+                return END_DOCUMENT;
+            }
+
+            JsonToken currentToken = jsonParser.nextToken();
+            if (currentToken == null) {
+                throw new IllegalStateException("End of document");
+            }
+
+            StackElement stackElement = new StackElement(currentToken, toXmlString(jsonParser.getCurrentName()));
+            tokenStack.push(stackElement);
+
+            if (currentToken == JsonToken.FIELD_NAME) {
+                currentToken = jsonParser.nextToken();
+
+                stackElement = new StackElement(currentToken, toXmlString(jsonParser.getCurrentName()));
+                tokenStack.push(stackElement);
+            }
+
+            switch (currentToken) {
+                case START_OBJECT:
+                case START_ARRAY:
+                    stackElement.xmlEvent = XMLEvent.START_ELEMENT;
+
+                    return XMLEvent.START_ELEMENT;
+                case END_OBJECT:
+                    removeStackElement(JsonToken.END_OBJECT);
+                    removeStackElement(JsonToken.START_OBJECT);
+                    removeStackElement(JsonToken.FIELD_NAME);
+                    eof = tokenStack.size() == 0;
+
+                    return XMLEvent.END_ELEMENT;
+                case END_ARRAY:
+                    removeStackElement(JsonToken.END_ARRAY);
+                    removeStackElement(JsonToken.START_ARRAY);
+                    removeStackElement(JsonToken.FIELD_NAME);
+                    eof = tokenStack.size() == 0;
+
+                    return XMLEvent.END_ELEMENT;
+                case VALUE_STRING:
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                case VALUE_NULL:
+                case VALUE_TRUE:
+                case VALUE_FALSE:
+                    stackElement.xmlEvent = XMLEvent.START_ELEMENT;
+
+                    return XMLEvent.START_ELEMENT;
+                default:
+                    throw new IllegalStateException("JsonToken: " + currentToken);
+            }
+
+        } catch (IOException e) {
+            throw new XMLStreamException(e);
+        }
+    }
+
+    private void removeStackElement(JsonToken jsonToken) {
+        final StackElement stackElement = tokenStack.peek();
+        if (stackElement == null || (stackElement.jsonToken != jsonToken)) {
+            if (stackElement != null && jsonToken == JsonToken.FIELD_NAME && (stackElement.jsonToken == JsonToken.START_ARRAY)) {
+                // anonym array
+                return;
+            }
+
+            if (stackElement == null && jsonToken == JsonToken.FIELD_NAME) {
+                // root object / array
+                return;
+            }
+
+            final String stackElements = tokenStack.stream().map(StackElement::toString).collect(Collectors.joining("\n"));
+            throw new IllegalStateException("Stack element did not match expected (" + jsonToken + ") one. Stack:\n" + stackElements);
+        }
+
+        tokenStack.pop();
+    }
+
+    @Override
+    public void require(int type, String namespaceURI, String localName) throws XMLStreamException {
+        throw new UnsupportedOperationException(XJConstants.UNSUPPORTED_OPERATION_EXCEPTION_MESSAGE);
+    }
+
+    @Override
+    public String getElementText() throws XMLStreamException {
+        throw new UnsupportedOperationException(XJConstants.UNSUPPORTED_OPERATION_EXCEPTION_MESSAGE);
+    }
+
+    @Override
+    public int nextTag() throws XMLStreamException {
+        int evt;
+        do {
+            evt = next();
+        } while (evt != XMLEvent.START_ELEMENT && evt != XMLEvent.END_ELEMENT);
+
+        return evt;
+    }
+
+    @Override
+    public boolean hasNext() throws XMLStreamException {
+        return !eof;
+    }
+
+    @Override
+    public void close() throws XMLStreamException {
+        try {
+            jsonParser.close();
+        } catch (IOException e) {
+            throw new XMLStreamException(e);
+        }
+    }
+
+    @Override
+    public String getNamespaceURI(String prefix) {
+        return null;
+    }
+
+    @Override
+    public boolean isStartElement() {
+        final StackElement stackElement = tokenStack.peek();
+        if (stackElement == null) {
+            return false;
+        }
+
+        return stackElement.xmlEvent == XMLEvent.START_ELEMENT;
+    }
+
+    @Override
+    public boolean isEndElement() {
+        final StackElement stackElement = tokenStack.peek();
+        if (stackElement == null) {
+            return false;
+        }
+
+        return stackElement.xmlEvent == XMLEvent.END_ELEMENT;
+    }
+
+    @Override
+    public boolean isCharacters() {
+        final StackElement stackElement = tokenStack.peek();
+        if (stackElement == null) {
+            return false;
+        }
+
+        return stackElement.xmlEvent == XMLEvent.CHARACTERS;
+    }
+
+    @Override
+    public boolean isWhiteSpace() {
+        return false;
+    }
+
+    @Override
+    public String getAttributeValue(String namespaceURI, String localName) {
+        throw new UnsupportedOperationException(XJConstants.UNSUPPORTED_OPERATION_EXCEPTION_MESSAGE);
+    }
+
+    @Override
+    public int getAttributeCount() {
+        final StackElement stackElement = tokenStack.peek();
+        if (stackElement == null || (stackElement.xmlEvent != XMLEvent.START_ELEMENT)) {
+            throw new IllegalStateException();
+        }
+
+        return stackElement.getAttributeCount();
+    }
+
+    @Override
+    public QName getAttributeName(int index) {
+        final StackElement stackElement = tokenStack.peek();
+        if (stackElement == null || (stackElement.xmlEvent != XMLEvent.START_ELEMENT)) {
+            throw new IllegalStateException();
+        }
+
+        return stackElement.getAttribute(index);
+    }
+
+    @Override
+    public String getAttributeNamespace(int index) {
+        final StackElement stackElement = tokenStack.peek();
+        if (stackElement == null || (stackElement.xmlEvent != XMLEvent.START_ELEMENT)) {
+            throw new IllegalStateException();
+        }
+
+        return stackElement.getAttribute(index).getNamespaceURI();
+    }
+
+    @Override
+    public String getAttributeLocalName(int index) {
+        final StackElement stackElement = tokenStack.peek();
+        if (stackElement == null || (stackElement.xmlEvent != XMLEvent.START_ELEMENT)) {
+            throw new IllegalStateException();
+        }
+
+        return stackElement.getAttribute(index).getLocalPart();
+    }
+
+    @Override
+    public String getAttributePrefix(int index) {
+        final StackElement stackElement = tokenStack.peek();
+        if (stackElement == null || (stackElement.xmlEvent != XMLEvent.START_ELEMENT)) {
+            throw new IllegalStateException();
+        }
+
+        return stackElement.getAttribute(index).getPrefix();
+    }
+
+    @Override
+    public String getAttributeType(int index) {
+        final StackElement stackElement = tokenStack.peek();
+        if (stackElement == null || (stackElement.xmlEvent != XMLEvent.START_ELEMENT)) {
+            throw new IllegalStateException();
+        }
+
+        return "CDATA";
+    }
+
+    @Override
+    public String getAttributeValue(int index) {
+        final StackElement stackElement = tokenStack.peek();
+        if (stackElement == null || (stackElement.xmlEvent != XMLEvent.START_ELEMENT)) {
+            throw new IllegalStateException();
+        }
+
+        return tokenStack.peek().getAttributeValue(index);
+    }
+
+    @Override
+    public boolean isAttributeSpecified(int index) {
+        return false;
+    }
+
+    @Override
+    public int getNamespaceCount() {
+        // declare ns on root element
+        if (tokenStack.size() == 1) {
+            return 1;
+        }
+
+        return 0;
+    }
+
+    @Override
+    public String getNamespacePrefix(int index) {
+        final StackElement stackElement = tokenStack.peek();
+        if (stackElement == null || (stackElement.xmlEvent != XMLEvent.START_ELEMENT && stackElement.xmlEvent != XMLEvent.END_ELEMENT)) {
+            throw new IllegalStateException();
+        }
+
+        return XJConstants.NS_PREFIX_XJ;
+    }
+
+    @Override
+    public String getNamespaceURI(int index) {
+        final StackElement stackElement = tokenStack.peek();
+        if (stackElement == null || (stackElement.xmlEvent != XMLEvent.START_ELEMENT && stackElement.xmlEvent != XMLEvent.END_ELEMENT)) {
+            throw new IllegalStateException();
+        }
+
+        return XJConstants.NS_XJ;
+    }
+
+    @Override
+    public NamespaceContext getNamespaceContext() {
+        throw new UnsupportedOperationException(XJConstants.UNSUPPORTED_OPERATION_EXCEPTION_MESSAGE);
+    }
+
+    @Override
+    public int getEventType() {
+        if (eof) {
+            return XMLEvent.END_DOCUMENT;
+        }
+
+        if (tokenStack.size() == 0) {
+            return XMLEvent.START_DOCUMENT;
+        }
+
+        return tokenStack.peek().xmlEvent;
+    }
+
+    @Override
+    public String getText() {
+        return new String(getTextCharacters());
+    }
+
+    @Override
+    public char[] getTextCharacters() {
+        final StackElement stackElement = tokenStack.peek();
+        if (stackElement == null || stackElement.xmlEvent != XMLEvent.CHARACTERS) {
+            throw new IllegalStateException();
+        }
+
+        try {
+            setXmlText(stackElement, jsonParser);
+            return stackElement.value;
+        } catch (IOException e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
+    @Override
+    public int getTextCharacters(int sourceStart, char[] target, int targetStart, int length) throws XMLStreamException {
+        final char[] text = getTextCharacters();
+        System.arraycopy(text, sourceStart, target, targetStart, length);
+
+        return sourceStart + length;
+    }
+
+    @Override
+    public int getTextStart() {
+        // always starts at 0 because we normalized the text in setXmlText();
+        return 0;
+    }
+
+    @Override
+    public int getTextLength() {
+        final StackElement stackElement = tokenStack.peek();
+
+        try {
+            setXmlText(stackElement, jsonParser);
+            return stackElement.value.length;
+        } catch (IOException e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
+    private void setXmlText(StackElement stackElement, JsonParser jsonParser) throws IOException {
+        if (stackElement.value == null) {
+            stackElement.value = toXmlString(jsonParser.getTextCharacters(), jsonParser.getTextOffset(), jsonParser.getTextLength());
+        }
+    }
+
+    @Override
+    public String getEncoding() {
+        return null;
+    }
+
+    @Override
+    public boolean hasText() {
+        final StackElement stackElement = tokenStack.peek();
+        if (stackElement == null) {
+            return false;
+        }
+
+        return stackElement.xmlEvent == XMLEvent.CHARACTERS;
+    }
+
+    @Override
+    public Location getLocation() {
+        return LOCATION;
+    }
+
+    @Override
+    public QName getName() {
+        return new QName("object");
+    }
+
+    @Override
+    public String getLocalName() {
+        return "object";
+    }
+
+    @Override
+    public boolean hasName() {
+        final StackElement stackElement = tokenStack.peek();
+        if (stackElement == null) {
+            return false;
+        }
+
+        return stackElement.xmlEvent == XMLEvent.START_ELEMENT || stackElement.xmlEvent == XMLEvent.END_ELEMENT;
+    }
+
+    @Override
+    public String getNamespaceURI() {
+        return null;
+    }
+
+    @Override
+    public String getPrefix() {
+        return null;
+    }
+
+    @Override
+    public String getVersion() {
+        return null;
+    }
+
+    @Override
+    public boolean isStandalone() {
+        return false;
+    }
+
+    @Override
+    public boolean standaloneSet() {
+        return false;
+    }
+
+    @Override
+    public String getCharacterEncodingScheme() {
+        return null;
+    }
+
+    @Override
+    public String getPITarget() {
+        return null;
+    }
+
+    @Override
+    public String getPIData() {
+        return null;
+    }
+
+    private String toXmlString(String input) {
+        if (input == null || input.length() == 0) {
+            return null;
+        }
+
+        final char[] chars = input.toCharArray();
+        return new String(toXmlString(chars, 0, chars.length));
+    }
+
+    private char[] toXmlString(char[] input, int offset, int length) {
+        if (length == 0) {
+            return new char[0];
+        }
+
+        char[] res = new char[length];
+        int copied = 0;
+
+        for (int i = offset; i < (offset + length); i++) {
+            final char cur = input[i];
+            if ((cur < 9) || (cur > 10 && cur < 13) || (cur > 13 && cur < 32)) { // non valid xml characters
+                continue;
+            }
+
+            res[copied++] = cur;
+        }
+
+        return Arrays.copyOfRange(res, 0, copied);
+    }
+
+    private static class StackElement {
+
+        private JsonToken jsonToken;
+        private String name;
+        private int xmlEvent;
+        private char[] value;
+        private List<QName> attributes;
+
+        StackElement(JsonToken jsonToken, String name) {
+            this.jsonToken = jsonToken;
+            this.name = name;
+
+            this.attributes = new ArrayList<>(2);
+
+            if (name != null) {
+                final QName nameAttribute = new QName(XJConstants.NS_XJ, XJConstants.TYPE_HINT_NAME, XJConstants.NS_PREFIX_XJ);
+                attributes.add(nameAttribute);
+            }
+
+            // todo configurable if type hints should be emitted?
+            final QName typeAttribute = new QName(XJConstants.NS_XJ, XJConstants.TYPE_HINT_TYPE, XJConstants.NS_PREFIX_XJ);
+            attributes.add(typeAttribute);
+        }
+
+        int getAttributeCount() {
+            return attributes.size();
+        }
+
+        QName getAttribute(int idx) {
+            return attributes.get(idx);
+        }
+
+        String getAttributeValue(int idx) {
+            final QName attribute = getAttribute(idx);
+            switch (attribute.getLocalPart()) {
+                case XJConstants.TYPE_HINT_NAME:
+                    return this.name;
+                case XJConstants.TYPE_HINT_TYPE:
+                    return XJConstants.JSONTYPE_TYPE_MAP.get(this.jsonToken);
+                default:
+                    throw new IllegalArgumentException("Unknown attribute");
+            }
+        }
+
+        @Override
+        public String toString() {
+            return "StackElement{" +
+                    "jsonToken=" + jsonToken +
+                    ", name='" + name + '\'' +
+                    ", xmlEvent=" + xmlEvent +
+                    ", value=" + Arrays.toString(value) +
+                    ", attributes=" + attributes +
+                    '}';
+        }
+    }
+}
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/SourceHandlerFactory.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/SourceHandlerFactory.java
new file mode 100644
index 0000000..76898c1
--- /dev/null
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/SourceHandlerFactory.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xj;
+
+import org.apache.camel.Exchange;
+
+import javax.xml.transform.Source;
+
+public interface SourceHandlerFactory {
+
+    Source getSource(Exchange exchange) throws Exception;
+}
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/TransformDirection.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/TransformDirection.java
new file mode 100644
index 0000000..73b0f2f
--- /dev/null
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/TransformDirection.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xj;
+
+public enum TransformDirection {
+    XML2JSON,
+    JSON2XML
+}
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/XJComponent.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/XJComponent.java
new file mode 100644
index 0000000..030d560
--- /dev/null
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/XJComponent.java
@@ -0,0 +1,203 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xj;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.component.xslt.DefaultXsltUriResolverFactory;
+import org.apache.camel.component.xslt.XsltUriResolverFactory;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.support.DefaultComponent;
+import org.apache.camel.support.EndpointHelper;
+import org.apache.camel.support.ResourceHelper;
+
+import javax.xml.transform.URIResolver;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+// todo?: This class is just a copy of XsltComponent because of minor but important different requirements. Refactoring of XsltComponent so that we can extend it?
+
+/**
+ * The <a href="http://camel.apache.org/xj.html">XJ Component</a> is for performing xml to json and back transformations of messages
+ */
+@Component("xj")
+public class XJComponent extends DefaultComponent {
+
+    @Metadata(label = "advanced")
+    private URIResolver uriResolver;
+    @Metadata(label = "advanced")
+    private XsltUriResolverFactory uriResolverFactory;
+    @Metadata(label = "advanced")
+    private Object saxonConfiguration;
+    @Metadata(label = "advanced")
+    private Map<String, Object> saxonConfigurationProperties = new HashMap<>();
+    @Metadata(label = "advanced", javaType = "java.lang.String")
+    private List<Object> saxonExtensionFunctions;
+    @Metadata(defaultValue = "true")
+    private boolean contentCache = true;
+    @Metadata
+    private boolean saxon;
+
+    public XJComponent() {
+    }
+
+    public XsltUriResolverFactory getUriResolverFactory() {
+        return uriResolverFactory;
+    }
+
+    /**
+     * To use a custom UriResolver which depends on a dynamic endpoint resource URI. Should not be used together with the option 'uriResolver'.
+     */
+    public void setUriResolverFactory(XsltUriResolverFactory uriResolverFactory) {
+        this.uriResolverFactory = uriResolverFactory;
+    }
+
+    public URIResolver getUriResolver() {
+        return uriResolver;
+    }
+
+    /**
+     * To use a custom UriResolver. Should not be used together with the option 'uriResolverFactory'.
+     */
+    public void setUriResolver(URIResolver uriResolver) {
+        this.uriResolver = uriResolver;
+    }
+
+    public boolean isContentCache() {
+        return contentCache;
+    }
+
+    /**
+     * Cache for the resource content (the stylesheet file) when it is loaded.
+     * If set to false Camel will reload the stylesheet file on each message processing. This is good for development.
+     * A cached stylesheet can be forced to reload at runtime via JMX using the clearCachedStylesheet operation.
+     */
+    public void setContentCache(boolean contentCache) {
+        this.contentCache = contentCache;
+    }
+
+    public boolean isSaxon() {
+        return saxon;
+    }
+
+    /**
+     * Whether to use Saxon as the transformerFactoryClass.
+     * If enabled then the class net.sf.saxon.TransformerFactoryImpl. You would need to add Saxon to the classpath.
+     */
+    public void setSaxon(boolean saxon) {
+        this.saxon = saxon;
+    }
+
+    public List<Object> getSaxonExtensionFunctions() {
+        return saxonExtensionFunctions;
+    }
+
+    /**
+     * Allows you to use a custom net.sf.saxon.lib.ExtensionFunctionDefinition.
+     * You would need to add camel-saxon to the classpath.
+     * The function is looked up in the registry, where you can comma to separate multiple values to lookup.
+     */
+    public void setSaxonExtensionFunctions(List<Object> extensionFunctions) {
+        this.saxonExtensionFunctions = extensionFunctions;
+    }
+
+    /**
+     * Allows you to use a custom net.sf.saxon.lib.ExtensionFunctionDefinition.
+     * You would need to add camel-saxon to the classpath.
+     * The function is looked up in the registry, where you can comma to separate multiple values to lookup.
+     */
+    public void setSaxonExtensionFunctions(String extensionFunctions) {
+        this.saxonExtensionFunctions = EndpointHelper.resolveReferenceListParameter(
+                getCamelContext(),
+                extensionFunctions,
+                Object.class
+        );
+    }
+
+    public Object getSaxonConfiguration() {
+        return saxonConfiguration;
+    }
+
+    /**
+     * To use a custom Saxon configuration
+     */
+    public void setSaxonConfiguration(Object saxonConfiguration) {
+        this.saxonConfiguration = saxonConfiguration;
+    }
+
+    public Map<String, Object> getSaxonConfigurationProperties() {
+        return saxonConfigurationProperties;
+    }
+
+    /**
+     * To set custom Saxon configuration properties
+     */
+    public void setSaxonConfigurationProperties(Map<String, Object> configurationProperties) {
+        this.saxonConfigurationProperties = configurationProperties;
+    }
+
+    @Override
+    protected Endpoint createEndpoint(String uri, final String remaining, Map<String, Object> parameters) throws Exception {
+        XJEndpoint endpoint = new XJEndpoint(uri, this);
+        endpoint.setContentCache(isContentCache());
+        endpoint.setSaxon(isSaxon());
+        endpoint.setSaxonConfiguration(saxonConfiguration);
+        endpoint.setSaxonConfigurationProperties(saxonConfigurationProperties);
+        endpoint.setSaxonExtensionFunctions(saxonExtensionFunctions);
+
+        // lookup custom resolver to use
+        URIResolver resolver = resolveAndRemoveReferenceParameter(parameters, "uriResolver", URIResolver.class);
+        if (resolver == null) {
+            // not in endpoint then use component specific resolver
+            resolver = getUriResolver();
+        }
+        if (resolver == null) {
+            // lookup custom resolver factory to use
+            XsltUriResolverFactory resolverFactory = resolveAndRemoveReferenceParameter(parameters, "uriResolverFactory", XsltUriResolverFactory.class);
+            if (resolverFactory == null) {
+                // not in endpoint then use component specific resolver factory
+                resolverFactory = getUriResolverFactory();
+            }
+            if (resolverFactory == null) {
+                // fallback to use the Default URI resolver factory
+                resolverFactory = new DefaultXsltUriResolverFactory();
+            }
+
+            resolver = resolverFactory.createUriResolver(getCamelContext(), remaining);
+        }
+        endpoint.setUriResolver(resolver);
+
+        setProperties(endpoint, parameters);
+
+        String resourceUri = remaining;
+        if (ResourceHelper.isHttpUri(resourceUri)) {
+            // if its a http uri, then append additional parameters as they are part of the uri
+            resourceUri = ResourceHelper.appendParameters(resourceUri, parameters);
+        }
+        log.debug("{} using schema resource: {}", this, resourceUri);
+        endpoint.setResourceUri(resourceUri);
+
+        if (!parameters.isEmpty()) {
+            // additional parameters need to be stored on endpoint as they can be used to configure xslt builder additionally
+            endpoint.setParameters(parameters);
+        }
+
+        return endpoint;
+    }
+
+}
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/XJConstants.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/XJConstants.java
new file mode 100644
index 0000000..932a335
--- /dev/null
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/XJConstants.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.xj;
+
+import com.fasterxml.jackson.core.JsonToken;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+public class XJConstants {
+
+    public static final String NS_XJ = "http://camel.apache.org/component/xj";
+    public static final String NS_PREFIX_XJ = "xj";
+
+    public static final String TYPE_HINT_NAME = "name";
+    public static final String TYPE_HINT_TYPE = "type";
+
+    public static final Map<JsonToken, String> JSONTYPE_TYPE_MAP;
+    public static final Map<String, JsonToken> TYPE_JSONTYPE_MAP;
+
+    public static final String UNSUPPORTED_OPERATION_EXCEPTION_MESSAGE = "unsupported / not yet implemented";
+
+    static {
+        final Map<JsonToken, String> jsonTypeTypeMap = new HashMap<>();
+        jsonTypeTypeMap.put(JsonToken.START_OBJECT, "object");
+        jsonTypeTypeMap.put(JsonToken.END_OBJECT, "object");
+        jsonTypeTypeMap.put(JsonToken.START_ARRAY, "array");
+        jsonTypeTypeMap.put(JsonToken.END_ARRAY, "array");
+        jsonTypeTypeMap.put(JsonToken.VALUE_STRING, "string");
+        jsonTypeTypeMap.put(JsonToken.VALUE_NUMBER_INT, "int");
+        jsonTypeTypeMap.put(JsonToken.VALUE_NUMBER_FLOAT, "float");
+        jsonTypeTypeMap.put(JsonToken.VALUE_TRUE, "boolean");
+        jsonTypeTypeMap.put(JsonToken.VALUE_FALSE, "boolean");
+        jsonTypeTypeMap.put(JsonToken.VALUE_NULL, "null");
+
+        JSONTYPE_TYPE_MAP = Collections.unmodifiableMap(jsonTypeTypeMap);
+
+        final Map<String, JsonToken> typeJsonTypeMap = new HashMap<>();
+        typeJsonTypeMap.put("object", JsonToken.START_OBJECT);
+        typeJsonTypeMap.put("array", JsonToken.START_ARRAY);
+        typeJsonTypeMap.put("string", JsonToken.VALUE_STRING);
+        typeJsonTypeMap.put("int", JsonToken.VALUE_NUMBER_INT);
+        typeJsonTypeMap.put("float", JsonToken.VALUE_NUMBER_FLOAT);
+        typeJsonTypeMap.put("boolean", JsonToken.VALUE_TRUE);
+        typeJsonTypeMap.put("null", JsonToken.VALUE_NULL);
+
+        TYPE_JSONTYPE_MAP = Collections.unmodifiableMap(typeJsonTypeMap);
+    }
+
+    private XJConstants() {
+    }
+}
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/XJEndpoint.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/XJEndpoint.java
new file mode 100644
index 0000000..59de196
--- /dev/null
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/XJEndpoint.java
@@ -0,0 +1,527 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xj;
+
+import com.fasterxml.jackson.core.JsonFactory;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Component;
+import org.apache.camel.Exchange;
+import org.apache.camel.api.management.ManagedAttribute;
+import org.apache.camel.api.management.ManagedOperation;
+import org.apache.camel.api.management.ManagedResource;
+import org.apache.camel.component.xslt.ResultHandlerFactory;
+import org.apache.camel.component.xslt.XsltOutput;
+import org.apache.camel.spi.*;
+import org.apache.camel.support.EndpointHelper;
+import org.apache.camel.support.ProcessorEndpoint;
+import org.apache.camel.support.service.ServiceHelper;
+import org.apache.camel.util.ObjectHelper;
+import org.xml.sax.EntityResolver;
+
+import javax.xml.transform.*;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+// todo?: This class is just a copy of XsltEndpoint because of minor but important different requirements. Refactoring of XsltComponent so that we can extend it?
+
+/**
+ * Transforms json/xml message back and forth using a XSLT.
+ */
+@ManagedResource(description = "Managed XJEndpoint")
+@UriEndpoint(firstVersion = "2.25.0", scheme = "xj", title = "XJ", syntax = "xj:resourceUri", producerOnly = true, label = "transformation")
+public class XJEndpoint extends ProcessorEndpoint {
+
+    public static final String SAXON_TRANSFORMER_FACTORY_CLASS_NAME = "net.sf.saxon.TransformerFactoryImpl";
+
+    private volatile boolean cacheCleared;
+    private volatile XsltBuilder xslt;
+    private Map<String, Object> parameters;
+
+    private JsonFactory jsonFactory = new JsonFactory();
+
+    @UriParam
+    @Metadata(required = true)
+    private TransformDirection transformDirection;
+    @UriPath
+    @Metadata(required = true)
+    private String resourceUri;
+    @UriParam(defaultValue = "true")
+    private boolean contentCache = true;
+    @UriParam(label = "advanced")
+    private String transformerFactoryClass;
+    @UriParam(label = "advanced")
+    private TransformerFactory transformerFactory;
+    @UriParam
+    private boolean saxon;
+    @UriParam(label = "advanced")
+    private Object saxonConfiguration;
+    @Metadata(label = "advanced")
+    private Map<String, Object> saxonConfigurationProperties = new HashMap<>();
+    @UriParam(label = "advanced", javaType = "java.lang.String")
+    private List<Object> saxonExtensionFunctions;
+    @UriParam(label = "advanced")
+    private ResultHandlerFactory resultHandlerFactory;
+    @UriParam(defaultValue = "true")
+    private boolean failOnNullBody = true;
+    @UriParam(defaultValue = "string")
+    private XsltOutput output = XsltOutput.string;
+    @UriParam(defaultValue = "0")
+    private int transformerCacheSize;
+    @UriParam(label = "advanced")
+    private ErrorListener errorListener;
+    @UriParam(label = "advanced")
+    private URIResolver uriResolver;
+    @UriParam
+    private boolean deleteOutputFile;
+    @UriParam(label = "advanced")
+    private EntityResolver entityResolver;
+
+    public XJEndpoint(String endpointUri, Component component) {
+        super(endpointUri, component);
+    }
+
+    @ManagedOperation(description = "Clears the cached XSLT stylesheet, forcing to re-load the stylesheet on next request")
+    public void clearCachedStylesheet() {
+        this.cacheCleared = true;
+    }
+
+    @ManagedAttribute(description = "Whether the XSLT stylesheet is cached")
+    public boolean isCacheStylesheet() {
+        return contentCache;
+    }
+
+    public XJEndpoint findOrCreateEndpoint(String uri, String newResourceUri) {
+        String newUri = uri.replace(resourceUri, newResourceUri);
+        log.trace("Getting endpoint with URI: {}", newUri);
+        return getCamelContext().getEndpoint(newUri, XJEndpoint.class);
+    }
+
+    @Override
+    protected void onExchange(Exchange exchange) throws Exception {
+        if (!contentCache || cacheCleared) {
+            loadResource(resourceUri);
+        }
+        super.onExchange(exchange);
+    }
+
+    @ManagedAttribute(description = "Transform direction")
+    public TransformDirection getTransformDirection() {
+        return transformDirection;
+    }
+
+    /**
+     * The transform direction. Either XML2JSON or JSON2XML
+     */
+    public void setTransformDirection(TransformDirection transformDirection) {
+        this.transformDirection = transformDirection;
+    }
+
+    public boolean isCacheCleared() {
+        return cacheCleared;
+    }
+
+    public void setCacheCleared(boolean cacheCleared) {
+        this.cacheCleared = cacheCleared;
+    }
+
+    public XsltBuilder getXslt() {
+        return xslt;
+    }
+
+    public void setXslt(XsltBuilder xslt) {
+        this.xslt = xslt;
+    }
+
+    @ManagedAttribute(description = "Path to the template")
+    public String getResourceUri() {
+        return resourceUri;
+    }
+
+    /**
+     * Path to the template.
+     * <p/>
+     * The following is supported by the default URIResolver.
+     * You can prefix with: classpath, file, http, ref, or bean.
+     * classpath, file and http loads the resource using these protocols (classpath is default).
+     * ref will lookup the resource in the registry.
+     * bean will call a method on a bean to be used as the resource.
+     * For bean you can specify the method name after dot, eg bean:myBean.myMethod
+     *
+     * @param resourceUri the resource path
+     */
+    public void setResourceUri(String resourceUri) {
+        this.resourceUri = resourceUri;
+    }
+
+    public String getTransformerFactoryClass() {
+        return transformerFactoryClass;
+    }
+
+    /**
+     * To use a custom XSLT transformer factory, specified as a FQN class name
+     */
+    public void setTransformerFactoryClass(String transformerFactoryClass) {
+        this.transformerFactoryClass = transformerFactoryClass;
+    }
+
+    public TransformerFactory getTransformerFactory() {
+        return transformerFactory;
+    }
+
+    /**
+     * To use a custom XSLT transformer factory
+     */
+    public void setTransformerFactory(TransformerFactory transformerFactory) {
+        this.transformerFactory = transformerFactory;
+    }
+
+    @ManagedAttribute(description = "Whether to use Saxon as the transformerFactoryClass")
+    public boolean isSaxon() {
+        return saxon;
+    }
+
+    /**
+     * Whether to use Saxon as the transformerFactoryClass.
+     * If enabled then the class net.sf.saxon.TransformerFactoryImpl. You would need to add Saxon to the classpath.
+     */
+    public void setSaxon(boolean saxon) {
+        this.saxon = saxon;
+    }
+
+    public List<Object> getSaxonExtensionFunctions() {
+        return saxonExtensionFunctions;
+    }
+
+    /**
+     * Allows you to use a custom net.sf.saxon.lib.ExtensionFunctionDefinition.
+     * You would need to add camel-saxon to the classpath.
+     * The function is looked up in the registry, where you can comma to separate multiple values to lookup.
+     */
+    public void setSaxonExtensionFunctions(List<Object> extensionFunctions) {
+        this.saxonExtensionFunctions = extensionFunctions;
+    }
+
+    /**
+     * Allows you to use a custom net.sf.saxon.lib.ExtensionFunctionDefinition.
+     * You would need to add camel-saxon to the classpath.
+     * The function is looked up in the registry, where you can comma to separate multiple values to lookup.
+     */
+    public void setSaxonExtensionFunctions(String extensionFunctions) {
+        this.saxonExtensionFunctions = EndpointHelper.resolveReferenceListParameter(
+                getCamelContext(),
+                extensionFunctions,
+                Object.class
+        );
+    }
+
+    public Object getSaxonConfiguration() {
+        return saxonConfiguration;
+    }
+
+    /**
+     * To use a custom Saxon configuration
+     */
+    public void setSaxonConfiguration(Object saxonConfiguration) {
+        this.saxonConfiguration = saxonConfiguration;
+    }
+
+    public Map<String, Object> getSaxonConfigurationProperties() {
+        return saxonConfigurationProperties;
+    }
+
+    /**
+     * To set custom Saxon configuration properties
+     */
+    public void setSaxonConfigurationProperties(Map<String, Object> configurationProperties) {
+        this.saxonConfigurationProperties = configurationProperties;
+    }
+
+    public ResultHandlerFactory getResultHandlerFactory() {
+        return resultHandlerFactory;
+    }
+
+    /**
+     * Allows you to use a custom org.apache.camel.builder.xml.ResultHandlerFactory which is capable of
+     * using custom org.apache.camel.builder.xml.ResultHandler types.
+     */
+    public void setResultHandlerFactory(ResultHandlerFactory resultHandlerFactory) {
+        this.resultHandlerFactory = resultHandlerFactory;
+    }
+
+    @ManagedAttribute(description = "Whether or not to throw an exception if the input body is null")
+    public boolean isFailOnNullBody() {
+        return failOnNullBody;
+    }
+
+    /**
+     * Whether or not to throw an exception if the input body is null.
+     */
+    public void setFailOnNullBody(boolean failOnNullBody) {
+        this.failOnNullBody = failOnNullBody;
+    }
+
+    @ManagedAttribute(description = "What kind of option to use.")
+    public XsltOutput getOutput() {
+        return output;
+    }
+
+    /**
+     * Option to specify which output type to use.
+     * Possible values are: string, bytes, DOM, file. The first three options are all in memory based, where as file is streamed directly to a java.io.File.
+     * For file you must specify the filename in the IN header with the key Exchange.XSLT_FILE_NAME which is also CamelXsltFileName.
+     * Also any paths leading to the filename must be created beforehand, otherwise an exception is thrown at runtime.
+     */
+    public void setOutput(XsltOutput output) {
+        this.output = output;
+    }
+
+    public int getTransformerCacheSize() {
+        return transformerCacheSize;
+    }
+
+    /**
+     * The number of javax.xml.transform.Transformer object that are cached for reuse to avoid calls to Template.newTransformer().
+     */
+    public void setTransformerCacheSize(int transformerCacheSize) {
+        this.transformerCacheSize = transformerCacheSize;
+    }
+
+    public ErrorListener getErrorListener() {
+        return errorListener;
+    }
+
+    /**
+     * Allows to configure to use a custom javax.xml.transform.ErrorListener. Beware when doing this then the default error
+     * listener which captures any errors or fatal errors and store information on the Exchange as properties is not in use.
+     * So only use this option for special use-cases.
+     */
+    public void setErrorListener(ErrorListener errorListener) {
+        this.errorListener = errorListener;
+    }
+
+    @ManagedAttribute(description = "Cache for the resource content (the stylesheet file) when it is loaded.")
+    public boolean isContentCache() {
+        return contentCache;
+    }
+
+    /**
+     * Cache for the resource content (the stylesheet file) when it is loaded.
+     * If set to false Camel will reload the stylesheet file on each message processing. This is good for development.
+     * A cached stylesheet can be forced to reload at runtime via JMX using the clearCachedStylesheet operation.
+     */
+    public void setContentCache(boolean contentCache) {
+        this.contentCache = contentCache;
+    }
+
+    public URIResolver getUriResolver() {
+        return uriResolver;
+    }
+
+    /**
+     * To use a custom javax.xml.transform.URIResolver
+     */
+    public void setUriResolver(URIResolver uriResolver) {
+        this.uriResolver = uriResolver;
+    }
+
+    public boolean isDeleteOutputFile() {
+        return deleteOutputFile;
+    }
+
+    /**
+     * If you have output=file then this option dictates whether or not the output file should be deleted when the Exchange
+     * is done processing. For example suppose the output file is a temporary file, then it can be a good idea to delete it after use.
+     */
+    public void setDeleteOutputFile(boolean deleteOutputFile) {
+        this.deleteOutputFile = deleteOutputFile;
+    }
+
+    public EntityResolver getEntityResolver() {
+        return entityResolver;
+    }
+
+    /**
+     * To use a custom org.xml.sax.EntityResolver with javax.xml.transform.sax.SAXSource.
+     */
+    public void setEntityResolver(EntityResolver entityResolver) {
+        this.entityResolver = entityResolver;
+    }
+
+    public Map<String, Object> getParameters() {
+        return parameters;
+    }
+
+    /**
+     * Additional parameters to configure on the javax.xml.transform.Transformer.
+     */
+    public void setParameters(Map<String, Object> parameters) {
+        this.parameters = parameters;
+    }
+
+    /**
+     * Loads the resource.
+     *
+     * @param resourceUri the resource to load
+     * @throws TransformerException is thrown if error loading resource
+     * @throws IOException          is thrown if error loading resource
+     */
+    protected void loadResource(String resourceUri) throws TransformerException, IOException {
+        log.trace("{} loading schema resource: {}", this, resourceUri);
+        Source source = xslt.getUriResolver().resolve(resourceUri, null);
+        if (source == null) {
+            throw new IOException("Cannot load xsl resource " + resourceUri);
+        } else {
+            xslt.setTransformerSource(source);
+        }
+        // now loaded so clear flag
+        cacheCleared = false;
+    }
+
+    @Override
+    protected void doStart() throws Exception {
+        super.doStart();
+
+        if (ObjectHelper.isEmpty(getResourceUri())) {
+            // todo using a stylesheet for "identity" transform is slow. But with transformerFactory we can't get an identity transformer...
+            setResourceUri("org/apache/camel/component/xj/identity.xsl");
+        }
+
+        final CamelContext ctx = getCamelContext();
+        final ClassResolver resolver = ctx.getClassResolver();
+        final Injector injector = ctx.getInjector();
+
+        log.debug("{} using schema resource: {}", this, resourceUri);
+
+        this.xslt = new XsltBuilder();
+
+        boolean useSaxon = false;
+        if (transformerFactoryClass == null && (saxon || saxonExtensionFunctions != null)) {
+            useSaxon = true;
+            transformerFactoryClass = SAXON_TRANSFORMER_FACTORY_CLASS_NAME;
+        }
+
+        TransformerFactory factory = transformerFactory;
+        if (factory == null && transformerFactoryClass != null) {
+            // provide the class loader of this component to work in OSGi environments
+            Class<TransformerFactory> factoryClass = resolver.resolveMandatoryClass(transformerFactoryClass, TransformerFactory.class, XJEndpoint.class.getClassLoader());
+            log.debug("Using TransformerFactoryClass {}", factoryClass);
+            factory = injector.newInstance(factoryClass);
+
+            if (useSaxon) {
+                XsltHelper.registerSaxonConfiguration(ctx, factoryClass, factory, saxonConfiguration);
+                XsltHelper.registerSaxonConfigurationProperties(ctx, factoryClass, factory, saxonConfigurationProperties);
+                XsltHelper.registerSaxonExtensionFunctions(ctx, factoryClass, factory, saxonExtensionFunctions);
+            }
+        }
+
+        if (factory != null) {
+            log.debug("Using TransformerFactory {}", factory);
+            xslt.setTransformerFactory(factory);
+        }
+        if (resultHandlerFactory != null) {
+            xslt.setResultHandlerFactory(resultHandlerFactory);
+        }
+        if (this.transformDirection == TransformDirection.XML2JSON) {
+            xslt.setSourceHandlerFactory(new XmlSourceHandlerFactoryImpl());
+        } else {
+            xslt.setSourceHandlerFactory(new JsonSourceHandlerFactoryImpl(jsonFactory));
+        }
+        if (errorListener != null) {
+            xslt.errorListener(errorListener);
+        }
+        xslt.setFailOnNullBody(failOnNullBody);
+        xslt.transformerCacheSize(transformerCacheSize);
+        xslt.setUriResolver(uriResolver);
+        xslt.setEntityResolver(entityResolver);
+        xslt.setAllowStAX(true); // we rely on stax so always to true. No issues so far with jdk 1.8 and saxon xslt.
+        xslt.setDeleteOutputFile(deleteOutputFile);
+
+        configureOutput(xslt, output.name());
+
+        // any additional transformer parameters then make a copy to avoid side-effects
+        if (parameters != null) {
+            Map<String, Object> copy = new HashMap<>(parameters);
+            xslt.setParameters(copy);
+        }
+
+        // must load resource first which sets a template and do a stylesheet compilation to catch errors early
+        loadResource(resourceUri);
+
+        // the processor is the xslt builder
+        setProcessor(xslt);
+    }
+
+    protected void configureOutput(XsltBuilder xslt, String output) throws Exception {
+        switch (this.transformDirection) {
+            case JSON2XML:
+                configureXmlOutput(xslt, output);
+                break;
+            case XML2JSON:
+                configureJsonOutput(xslt, output);
+                break;
+            default:
+                throw new IllegalArgumentException("Unknown transformation direction: " + this.transformDirection);
+        }
+    }
+
+    protected void configureXmlOutput(XsltBuilder xslt, String output) throws Exception {
+        if (ObjectHelper.isEmpty(output)) {
+            return;
+        }
+
+        switch (output) {
+            case "string":
+                xslt.outputString();
+                break;
+            case "bytes":
+                xslt.outputBytes();
+                break;
+            case "DOM":
+                xslt.outputDOM();
+                break;
+            case "file":
+                xslt.outputFile();
+                break;
+            default:
+                throw new IllegalArgumentException("Unknown output type: " + output);
+        }
+    }
+
+    protected void configureJsonOutput(XsltBuilder xslt, String output) throws Exception {
+        switch (output) {
+            case "bytes":
+                xslt.setResultHandlerFactory(new JsonStreamResultHandlerFactory(jsonFactory));
+                break;
+            case "DOM":
+                throw new UnsupportedOperationException("DOM output not supported when transforming to json");
+            case "file":
+                xslt.setResultHandlerFactory(new JsonFileResultHandlerFactory(jsonFactory));
+                break;
+            default:
+                xslt.setResultHandlerFactory(new JsonStringResultHandlerFactory(jsonFactory));
+                break;
+        }
+    }
+
+    @Override
+    protected void doStop() throws Exception {
+        super.doStop();
+        ServiceHelper.stopService(xslt);
+    }
+}
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/XmlJsonStreamWriter.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/XmlJsonStreamWriter.java
new file mode 100644
index 0000000..ab64538
--- /dev/null
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/XmlJsonStreamWriter.java
@@ -0,0 +1,640 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.xj;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonToken;
+
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+import javax.xml.stream.events.XMLEvent;
+import java.io.IOException;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * XML Json bridge. Explicitly using StreamWriter and not XMLEventWriter because saxon wants that.
+ */
+public class XmlJsonStreamWriter implements XMLStreamWriter {
+
+    private static final String JSON_MIXED_CONTENT_TEXT_KEY = "#text";
+
+    private final JsonGenerator jsonGenerator;
+
+    private TreeElement treeRoot;
+    private TreeElement currentTreeElement;
+
+    public XmlJsonStreamWriter(JsonGenerator jsonGenerator) {
+        this.jsonGenerator = jsonGenerator;
+    }
+
+    @Override
+    public void writeStartElement(String localName) throws XMLStreamException {
+        writeStartElement(null, localName, null);
+    }
+
+    @Override
+    public void writeStartElement(String namespaceURI, String localName) throws XMLStreamException {
+        writeStartElement(null, localName, namespaceURI);
+    }
+
+    @Override
+    public void writeStartElement(String prefix, String localName, String namespaceURI) throws XMLStreamException {
+        final TreeElement treeElement = new TreeElement(currentTreeElement, XMLEvent.START_ELEMENT, localName);
+
+        currentTreeElement.addChild(treeElement);
+        currentTreeElement = treeElement;
+    }
+
+    @Override
+    public void writeEmptyElement(String namespaceURI, String localName) throws XMLStreamException {
+        writeStartElement(null, namespaceURI, localName);
+        writeEndElement();
+    }
+
+    @Override
+    public void writeEmptyElement(String prefix, String localName, String namespaceURI) throws XMLStreamException {
+        writeStartElement(prefix, localName, namespaceURI);
+        writeEndElement();
+    }
+
+    @Override
+    public void writeEmptyElement(String localName) throws XMLStreamException {
+        writeStartElement(null, localName, null);
+        writeEndElement();
+    }
+
+    @Override
+    public void writeEndElement() throws XMLStreamException {
+        try {
+            currentTreeElement.writeEnd();
+        } catch (IOException e) {
+            throw new XMLStreamException(e);
+        }
+        currentTreeElement = currentTreeElement.parent;
+    }
+
+    @Override
+    public void writeEndDocument() throws XMLStreamException {
+        try {
+            treeRoot.write(jsonGenerator);
+        } catch (IOException e) {
+            throw new XMLStreamException(e);
+        }
+    }
+
+    @Override
+    public void close() throws XMLStreamException {
+        try {
+            jsonGenerator.close();
+        } catch (IOException e) {
+            throw new XMLStreamException(e);
+        }
+    }
+
+    @Override
+    public void flush() throws XMLStreamException {
+        try {
+            jsonGenerator.flush();
+        } catch (IOException e) {
+            throw new XMLStreamException(e);
+        }
+    }
+
+    @Override
+    public void writeAttribute(String localName, String value) throws XMLStreamException {
+        writeAttribute(null, null, localName, value);
+    }
+
+    @Override
+    public void writeAttribute(String prefix, String namespaceURI, String localName, String value) throws XMLStreamException {
+        if (XJConstants.NS_XJ.equals(namespaceURI)) {
+            switch (localName) {
+                case XJConstants.TYPE_HINT_NAME:
+                    currentTreeElement.setName(value);
+                    return;
+                case XJConstants.TYPE_HINT_TYPE:
+                    currentTreeElement.setJsonToken(XJConstants.TYPE_JSONTYPE_MAP.get(value));
+                    return;
+            }
+
+            return;
+        }
+
+        final TreeElement treeElement = new TreeElement(currentTreeElement, XMLEvent.ATTRIBUTE, JsonToken.VALUE_STRING, localName);
+        treeElement.setValue(value);
+
+        currentTreeElement.addChild(treeElement);
+    }
+
+    @Override
+    public void writeAttribute(String namespaceURI, String localName, String value) throws XMLStreamException {
+        writeAttribute(null, namespaceURI, localName, value);
+    }
+
+    @Override
+    public void writeNamespace(String prefix, String namespaceURI) throws XMLStreamException {
+    }
+
+    @Override
+    public void writeDefaultNamespace(String namespaceURI) throws XMLStreamException {
+    }
+
+    @Override
+    public void writeComment(String data) throws XMLStreamException {
+    }
+
+    @Override
+    public void writeProcessingInstruction(String target) throws XMLStreamException {
+    }
+
+    @Override
+    public void writeProcessingInstruction(String target, String data) throws XMLStreamException {
+    }
+
+    @Override
+    public void writeCData(String data) throws XMLStreamException {
+        writeCharacters(data);
+    }
+
+    @Override
+    public void writeDTD(String dtd) throws XMLStreamException {
+    }
+
+    @Override
+    public void writeEntityRef(String name) throws XMLStreamException {
+    }
+
+    @Override
+    public void writeStartDocument() throws XMLStreamException {
+        writeStartDocument(null);
+    }
+
+    @Override
+    public void writeStartDocument(String version) throws XMLStreamException {
+        writeStartDocument(null, version);
+    }
+
+    @Override
+    public void writeStartDocument(String encoding, String version) throws XMLStreamException {
+        final TreeElement treeElement = new TreeElement(null, XMLEvent.START_DOCUMENT, JsonToken.NOT_AVAILABLE);
+        this.treeRoot = treeElement;
+        this.currentTreeElement = treeElement;
+    }
+
+    @Override
+    public void writeCharacters(String text) throws XMLStreamException {
+        // check for non coalescing read
+        final List<TreeElement> childs = currentTreeElement.childs;
+        if (childs.size() > 0) {
+            final TreeElement child = childs.get(childs.size() - 1);
+            if (child.getXmlEvent() == XMLEvent.CHARACTERS) {
+                child.appendValue(text);
+
+                return;
+            }
+        }
+
+        final TreeElement treeElement = new TreeElement(currentTreeElement, XMLEvent.CHARACTERS, JsonToken.VALUE_STRING);
+        treeElement.setValue(text);
+
+        currentTreeElement.addChild(treeElement);
+    }
+
+    @Override
+    public void writeCharacters(char[] text, int start, int len) throws XMLStreamException {
+        writeCharacters(new String(text, start, len));
+    }
+
+    @Override
+    public String getPrefix(String uri) throws XMLStreamException {
+        return null;
+    }
+
+    @Override
+    public void setPrefix(String prefix, String uri) throws XMLStreamException {
+    }
+
+    @Override
+    public void setDefaultNamespace(String uri) throws XMLStreamException {
+    }
+
+    @Override
+    public void setNamespaceContext(NamespaceContext context) throws XMLStreamException {
+    }
+
+    @Override
+    public NamespaceContext getNamespaceContext() {
+        throw new UnsupportedOperationException(XJConstants.UNSUPPORTED_OPERATION_EXCEPTION_MESSAGE);
+    }
+
+    @Override
+    public Object getProperty(String name) throws IllegalArgumentException {
+        throw new IllegalArgumentException(name + " unsupported");
+    }
+
+
+    private static class TreeElement {
+
+        private TreeElement parent;
+        private List<TreeElement> childs = Collections.emptyList();
+
+        private String name;
+        private String value;
+        private int xmlEvent;
+        private JsonToken jsonToken;
+
+        TreeElement(TreeElement parent, int xmlEvent, String name) {
+            this.parent = parent;
+            this.xmlEvent = xmlEvent;
+            this.name = name;
+        }
+
+        TreeElement(TreeElement parent, int xmlEvent, JsonToken jsonToken) {
+            this.parent = parent;
+            this.xmlEvent = xmlEvent;
+            this.jsonToken = jsonToken;
+        }
+
+        TreeElement(TreeElement parent, int xmlEvent, JsonToken jsonToken, String name) {
+            this.parent = parent;
+            this.xmlEvent = xmlEvent;
+            this.jsonToken = jsonToken;
+            this.name = name;
+        }
+
+        int getXmlEvent() {
+            return this.xmlEvent;
+        }
+
+        void addChild(TreeElement treeElement) {
+            if (this.childs == Collections.EMPTY_LIST) {
+                this.childs = new ArrayList<>(1);
+            }
+
+            this.childs.add(treeElement);
+        }
+
+        void setJsonToken(JsonToken jsonToken) {
+            if (this.jsonToken == null) {
+                this.jsonToken = jsonToken;
+            }
+        }
+
+        void setName(String name) {
+            this.name = name;
+        }
+
+        void setValue(String value) {
+            this.value = value;
+        }
+
+        void appendValue(String value) {
+            this.value += value;
+        }
+
+        void writeEnd() throws IOException {
+            if (jsonToken == null) {
+                writeEndNoTypeHints();
+            } else { // type hints
+                // move type hints
+                writeEndHaveTypeHints();
+            }
+        }
+
+        private void writeEndNoTypeHints() {
+            switch (xmlEvent) {
+                case XMLEvent.START_ELEMENT:
+                    if (childs.isEmpty()) {
+                        // empty root element
+                        if (this.parent.jsonToken == JsonToken.NOT_AVAILABLE) {
+                            jsonToken = JsonToken.START_OBJECT;
+                        } else {
+                            jsonToken = JsonToken.FIELD_NAME;
+
+                            final TreeElement treeElement = new TreeElement(this, -1, JsonToken.VALUE_STRING);
+                            treeElement.setValue("");
+                            this.addChild(treeElement);
+                        }
+                    } else if (childs.size() == 1 && childs.get(0).xmlEvent == XMLEvent.CHARACTERS) {
+                        // just character childs.
+
+                        // empty root element
+                        if (this.parent.jsonToken == JsonToken.NOT_AVAILABLE) {
+                            jsonToken = JsonToken.START_OBJECT;
+
+                            final TreeElement child = childs.get(0);
+                            if (isWhitespace(child.value)) {
+                                childs.remove(0);
+                            } else {
+                                // create new intermediary element
+                                final TreeElement treeElement = new TreeElement(this, -1, JsonToken.FIELD_NAME, JSON_MIXED_CONTENT_TEXT_KEY);
+                                treeElement.addChild(child);
+                                childs.set(childs.indexOf(child), treeElement);
+                                child.parent = treeElement;
+                            }
+                        } else {
+                            jsonToken = JsonToken.FIELD_NAME;
+                        }
+                    } else {
+                        // mixed content fixup.
+                        final Iterator<TreeElement> iterator = childs.iterator();
+                        while (iterator.hasNext()) {
+                            TreeElement element = iterator.next();
+                            if (element.jsonToken == JsonToken.VALUE_STRING) {
+                                if (isWhitespace(element.value)) {
+                                    // remove element if is (ignorable-) whitespace
+                                    iterator.remove();
+                                } else {
+                                    // create new intermediary element
+                                    final TreeElement treeElement = new TreeElement(this, -1, JsonToken.FIELD_NAME,
+                                            element.name != null ? element.name : JSON_MIXED_CONTENT_TEXT_KEY);
+                                    treeElement.addChild(element);
+                                    childs.set(childs.indexOf(element), treeElement);
+                                    element.parent = treeElement;
+                                    element.jsonToken = JsonToken.VALUE_STRING;
+                                }
+                            }
+                        }
+
+                        jsonToken = JsonToken.START_OBJECT;
+
+                        final Map<String, Set<TreeElement>> childElementsMap = childs.stream()
+                                .collect(Collectors.groupingBy(o -> o.name, HashMap::new, Collectors.toCollection(LinkedHashSet::new)));
+
+                        // create arrays if element with the same name occurs more than once.
+                        for (Map.Entry<String, Set<TreeElement>> mapEntry : childElementsMap.entrySet()) {
+                            if (mapEntry.getValue().size() > 1) {
+                                if (childElementsMap.size() == 1) {
+                                    jsonToken = JsonToken.START_ARRAY;
+                                } else {
+                                    final TreeElement treeElement = new TreeElement(this, -1, JsonToken.START_ARRAY, mapEntry.getKey());
+                                    treeElement.childs = new ArrayList<>(mapEntry.getValue());
+                                    for (TreeElement child : treeElement.childs) {
+                                        child.parent = treeElement;
+                                    }
+
+                                    final List<TreeElement> newChildList = new ArrayList<>(this.childs.size() - mapEntry.getValue().size() + 1);
+                                    for (TreeElement e : this.childs) {
+                                        if (!mapEntry.getValue().contains(e)) {
+                                            newChildList.add(e);
+                                        }
+                                    }
+                                    childs = newChildList;
+                                    childs.add(treeElement);
+                                }
+                            }
+                        }
+                    }
+                    break;
+                default:
+                    throw new IllegalStateException("XMLEvent: " + xmlEvent + "; Json Token: " + jsonToken);
+            }
+        }
+
+        private void writeEndHaveTypeHints() {
+            switch (jsonToken) {
+                case VALUE_NULL:
+                case VALUE_STRING:
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                case VALUE_TRUE:
+                case VALUE_FALSE:
+                    if (childs.isEmpty()) {
+                        final TreeElement treeElement = new TreeElement(this, -1, jsonToken);
+                        treeElement.setValue("");
+                        this.addChild(treeElement);
+
+                        jsonToken = JsonToken.FIELD_NAME;
+                    } else if (childs.size() == 1) {
+                        childs.get(0).jsonToken = jsonToken;
+                        jsonToken = JsonToken.FIELD_NAME;
+                    } else {
+                        // create FIELD childs if element contains text and attributes.
+                        final Iterator<TreeElement> iterator = childs.iterator();
+                        while (iterator.hasNext()) {
+                            TreeElement element = iterator.next();
+                            if (isValueToken(element.jsonToken)) {
+                                if (isWhitespace(element.value)) {
+                                    // remove element if is (ignorable-) whitespace
+                                    iterator.remove();
+                                } else {
+                                    // create new intermediary element
+                                    final TreeElement treeElement = new TreeElement(this, -1, JsonToken.FIELD_NAME,
+                                            element.name != null ? element.name : JSON_MIXED_CONTENT_TEXT_KEY);
+                                    treeElement.addChild(element);
+                                    childs.set(childs.indexOf(element), treeElement);
+                                    element.parent = treeElement;
+                                    if (element.xmlEvent == XMLEvent.CHARACTERS) {
+                                        element.jsonToken = jsonToken;
+                                    }
+                                }
+                            }
+                        }
+
+                        jsonToken = JsonToken.START_OBJECT;
+
+                        final Map<String, Set<TreeElement>> childElementsMap = childs.stream()
+                                .collect(Collectors.groupingBy(o -> o.name, HashMap::new, Collectors.toCollection(LinkedHashSet::new)));
+
+                        // create arrays if element with the same name occurs more than once.
+                        for (Map.Entry<String, Set<TreeElement>> mapEntry : childElementsMap.entrySet()) {
+                            if (mapEntry.getValue().size() > 1) {
+
+                                if (childElementsMap.size() == 1) {
+                                    jsonToken = JsonToken.START_ARRAY;
+                                } else {
+                                    final TreeElement treeElement = new TreeElement(this, -1, JsonToken.START_ARRAY, mapEntry.getKey());
+                                    treeElement.childs = new ArrayList<>(mapEntry.getValue());
+                                    for (TreeElement child : treeElement.childs) {
+                                        child.parent = treeElement;
+                                    }
+
+                                    final List<TreeElement> newChildList = new ArrayList<>(this.childs.size() - mapEntry.getValue().size() + 1);
+                                    for (TreeElement e : this.childs) {
+                                        if (!mapEntry.getValue().contains(e)) {
+                                            newChildList.add(e);
+                                        }
+                                    }
+                                    childs = newChildList;
+                                    childs.add(treeElement);
+                                }
+                            }
+                        }
+                    }
+                    break;
+                case START_OBJECT:
+                case START_ARRAY:
+                    // mixed content fixup.
+                    final Iterator<TreeElement> iterator = childs.iterator();
+                    while (iterator.hasNext()) {
+                        TreeElement element = iterator.next();
+                        if (isValueToken(element.jsonToken)) {
+                            if (isWhitespace(element.value)) {
+                                // remove element if is (ignorable-) whitespace
+                                iterator.remove();
+                            } else {
+                                // create new intermediary element
+                                final TreeElement treeElement = new TreeElement(this, -1, JsonToken.FIELD_NAME, JSON_MIXED_CONTENT_TEXT_KEY);
+                                treeElement.addChild(element);
+                                childs.set(childs.indexOf(element), treeElement);
+                                element.parent = treeElement;
+                            }
+                        }
+                    }
+
+                    final Map<String, Set<TreeElement>> childElementsMap = childs.stream()
+                            .collect(Collectors.groupingBy(o -> o.name, HashMap::new, Collectors.toCollection(LinkedHashSet::new)));
+
+                    if (this.jsonToken != JsonToken.START_ARRAY) {
+
+                        // create arrays if element with the same name occurs more than once.
+                        for (Map.Entry<String, Set<TreeElement>> mapEntry : childElementsMap.entrySet()) {
+                            if (mapEntry.getValue().size() > 1) {
+
+                                final TreeElement treeElement = new TreeElement(this, -1, JsonToken.START_ARRAY, mapEntry.getKey());
+                                treeElement.childs = new ArrayList<>(mapEntry.getValue());
+                                for (TreeElement child : treeElement.childs) {
+                                    child.parent = treeElement;
+                                }
+
+                                final List<TreeElement> newChildList = new ArrayList<>(this.childs.size() - mapEntry.getValue().size() + 1);
+                                for (TreeElement e : this.childs) {
+                                    if (!mapEntry.getValue().contains(e)) {
+                                        newChildList.add(e);
+                                    }
+                                }
+                                childs = newChildList;
+                                childs.add(treeElement);
+                            }
+                        }
+                    }
+
+                    break;
+                default:
+                    throw new IllegalStateException("XMLEvent: " + xmlEvent + "; Json Token: " + jsonToken);
+            }
+        }
+
+        private boolean isWhitespace(String text) {
+            int len = text.length();
+            int st = 0;
+
+            while ((st < len) && (text.charAt(st) <= ' ')) {
+                st++;
+            }
+
+            return st == len;
+        }
+
+        private boolean isValueToken(JsonToken jsonToken) {
+            return jsonToken == JsonToken.VALUE_STRING ||
+                    jsonToken == JsonToken.VALUE_NUMBER_FLOAT ||
+                    jsonToken == JsonToken.VALUE_NUMBER_INT ||
+                    jsonToken == JsonToken.VALUE_TRUE ||
+                    jsonToken == JsonToken.VALUE_FALSE ||
+                    jsonToken == JsonToken.VALUE_NULL;
+        }
+
+        void write(JsonGenerator jsonGenerator) throws IOException {
+            switch (jsonToken) {
+                case NOT_AVAILABLE:
+                    break;
+                case START_OBJECT:
+                    if (parent.jsonToken == JsonToken.START_OBJECT) {
+                        jsonGenerator.writeObjectFieldStart(name);
+                    } else {
+                        jsonGenerator.writeStartObject();
+                    }
+
+                    break;
+                case START_ARRAY:
+                    if (parent.jsonToken == JsonToken.START_OBJECT) {
+                        jsonGenerator.writeArrayFieldStart(name);
+                    } else {
+                        jsonGenerator.writeStartArray();
+                    }
+
+                    break;
+                case FIELD_NAME:
+                    if (parent.jsonToken != JsonToken.START_ARRAY) {
+                        jsonGenerator.writeFieldName(name);
+                    }
+
+                    break;
+                case VALUE_STRING:
+                    jsonGenerator.writeString(value);
+
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                case VALUE_TRUE:
+                case VALUE_FALSE:
+                    if (value == null || value.isEmpty()) {
+                        jsonGenerator.writeNull();
+                    } else {
+                        jsonGenerator.writeRawValue(value);
+                    }
+
+                    break;
+                case VALUE_NULL:
+                    jsonGenerator.writeNull();
+
+                    break;
+                default:
+                    throw new IllegalStateException("XMLEvent: " + xmlEvent + "; Json Token: " + jsonToken);
+            }
+
+            for (TreeElement treeElement : childs) {
+                treeElement.write(jsonGenerator);
+            }
+
+            switch (jsonToken) {
+                case START_OBJECT:
+                    jsonGenerator.writeEndObject();
+                    break;
+                case START_ARRAY:
+                    jsonGenerator.writeEndArray();
+                    break;
+                case VALUE_NULL:
+                case NOT_AVAILABLE:
+                case FIELD_NAME:
+                case VALUE_STRING:
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                case VALUE_TRUE:
+                case VALUE_FALSE:
+                    // nop;
+                    break;
+                default:
+                    throw new IllegalStateException("XMLEvent: " + xmlEvent + "; Json Token: " + jsonToken);
+            }
+        }
+
+        @Override
+        public String toString() {
+            return "TreeElement{" +
+                    "name='" + name + '\'' +
+                    ", value='" + value + '\'' +
+                    ", xmlEvent=" + xmlEvent +
+                    ", jsonToken=" + jsonToken +
+                    '}';
+        }
+    }
+}
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/XmlSourceHandlerFactoryImpl.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/XmlSourceHandlerFactoryImpl.java
new file mode 100644
index 0000000..230459d
--- /dev/null
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/XmlSourceHandlerFactoryImpl.java
@@ -0,0 +1,150 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xj;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.ExpectedBodyTypeException;
+import org.apache.camel.RuntimeTransformException;
+import org.apache.camel.TypeConverter;
+import org.apache.camel.support.builder.xml.XMLConverterHelper;
+import org.w3c.dom.Node;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.Source;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.sax.SAXSource;
+import javax.xml.transform.stax.StAXSource;
+import javax.xml.transform.stream.StreamSource;
+import java.io.InputStream;
+
+public class XmlSourceHandlerFactoryImpl implements SourceHandlerFactory {
+
+    private XMLConverterHelper converter = new XMLConverterHelper();
+    private boolean isFailOnNullBody = true;
+
+    public void setFailOnNullBody(boolean failOnNullBody) {
+        isFailOnNullBody = failOnNullBody;
+    }
+
+    public boolean isFailOnNullBody() {
+        return isFailOnNullBody;
+    }
+
+    @Override
+    public Source getSource(Exchange exchange) throws Exception {
+        // only convert to input stream if really needed
+        if (isInputStreamNeeded(exchange)) {
+            InputStream is = exchange.getIn().getBody(InputStream.class);
+            return getSource(exchange, is);
+        } else {
+            Object body = exchange.getIn().getBody();
+            return getSource(exchange, body);
+        }
+    }
+
+    /**
+     * Checks whether we need an {@link InputStream} to access the message body.
+     * <p/>
+     * Depending on the content in the message body, we may not need to convert
+     * to {@link InputStream}.
+     *
+     * @param exchange the current exchange
+     * @return <tt>true</tt> to convert to {@link InputStream} beforehand converting to {@link Source} afterwards.
+     */
+    protected boolean isInputStreamNeeded(Exchange exchange) {
+        Object body = exchange.getIn().getBody();
+        if (body == null) {
+            return false;
+        }
+
+        if (body instanceof InputStream) {
+            return true;
+        } else if (body instanceof Source) {
+            return false;
+        } else if (body instanceof String) {
+            return false;
+        } else if (body instanceof byte[]) {
+            return false;
+        } else if (body instanceof Node) {
+            return false;
+        } else if (exchange.getContext().getTypeConverterRegistry().lookup(Source.class, body.getClass()) != null) {
+            //there is a direct and hopefully optimized converter to Source
+            return false;
+        }
+        // yes an input stream is needed
+        return true;
+    }
+
+    /**
+     * Converts the inbound body to a {@link Source}, if the body is <b>not</b> already a {@link Source}.
+     * <p/>
+     * This implementation will prefer to source in the following order:
+     * <ul>
+     *   <li>StAX - If StAX is allowed</li>
+     *   <li>SAX - SAX as 2nd choice</li>
+     *   <li>Stream - Stream as 3rd choice</li>
+     *   <li>DOM - DOM as 4th choice</li>
+     * </ul>
+     */
+    protected Source getSource(Exchange exchange, Object body) {
+        // body may already be a source
+        if (body instanceof Source) {
+            return (Source) body;
+        }
+        Source source = null;
+        if (body != null) {
+            // try StAX if enabled
+            source = exchange.getContext().getTypeConverter().tryConvertTo(StAXSource.class, exchange, body);
+
+            if (source == null) {
+                // then try SAX
+                source = exchange.getContext().getTypeConverter().tryConvertTo(SAXSource.class, exchange, body);
+            }
+            if (source == null) {
+                // then try stream
+                source = exchange.getContext().getTypeConverter().tryConvertTo(StreamSource.class, exchange, body);
+            }
+            if (source == null) {
+                // and fallback to DOM
+                source = exchange.getContext().getTypeConverter().tryConvertTo(DOMSource.class, exchange, body);
+            }
+            // as the TypeConverterRegistry will look up source the converter differently if the type converter is loaded different
+            // now we just put the call of source converter at last
+            if (source == null) {
+                TypeConverter tc = exchange.getContext().getTypeConverterRegistry().lookup(Source.class, body.getClass());
+                if (tc != null) {
+                    source = tc.convertTo(Source.class, exchange, body);
+                }
+            }
+        }
+
+        if (source == null) {
+            if (isFailOnNullBody()) {
+                throw new ExpectedBodyTypeException(exchange, Source.class);
+            } else {
+                try {
+                    source = converter.toDOMSource(converter.createDocument());
+                } catch (ParserConfigurationException | TransformerException e) {
+                    throw new RuntimeTransformException(e);
+                }
+            }
+        }
+
+        return source;
+    }
+}
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/XsltBuilder.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/XsltBuilder.java
new file mode 100644
index 0000000..ea69c86
--- /dev/null
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/XsltBuilder.java
@@ -0,0 +1,482 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xj;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.component.xslt.*;
+import org.apache.camel.support.ExchangeHelper;
+import org.apache.camel.support.SynchronizationAdapter;
+import org.apache.camel.support.builder.xml.XMLConverterHelper;
+import org.apache.camel.util.FileUtil;
+import org.apache.camel.util.IOHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xml.sax.EntityResolver;
+
+import javax.xml.transform.*;
+import javax.xml.transform.sax.SAXSource;
+import javax.xml.transform.stream.StreamSource;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.BlockingQueue;
+
+import static org.apache.camel.util.ObjectHelper.notNull;
+
+// todo?: This class is just a copy from the XsltComponent because of minor but important different requirements. Refactoring of XsltComponent so that we can extend it?
+
+/**
+ * Creates a <a href="http://camel.apache.org/processor.html">Processor</a>
+ * which performs an XSLT transformation of the IN message body.
+ * <p/>
+ * Will by default output the result as a String. You can chose which kind of output
+ * you want using the <tt>outputXXX</tt> methods.
+ */
+public class XsltBuilder implements Processor {
+
+    private static final Logger LOG = LoggerFactory.getLogger(XsltBuilder.class);
+    private Map<String, Object> parameters = new HashMap<>();
+    private XMLConverterHelper converter = new XMLConverterHelper();
+    private Templates template;
+    private volatile BlockingQueue<Transformer> transformers;
+    private SourceHandlerFactory sourceHandlerFactory;
+    private ResultHandlerFactory resultHandlerFactory = new StringResultHandlerFactory();
+    private boolean failOnNullBody = true;
+    private URIResolver uriResolver;
+    private boolean deleteOutputFile;
+    private ErrorListener errorListener;
+    private boolean allowStAX = true;
+    private EntityResolver entityResolver;
+
+    public XsltBuilder() {
+    }
+
+    public XsltBuilder(Templates templates) {
+        this.template = templates;
+    }
+
+    @Override
+    public String toString() {
+        return "XSLT[" + template + "]";
+    }
+
+    @Override
+    public void process(Exchange exchange) throws Exception {
+        notNull(getTemplate(), "template");
+
+        if (isDeleteOutputFile()) {
+            // add on completion so we can delete the file when the Exchange is done
+            String fileName = ExchangeHelper.getMandatoryHeader(exchange, Exchange.XSLT_FILE_NAME, String.class);
+            exchange.addOnCompletion(new XsltBuilderOnCompletion(fileName));
+        }
+
+        Transformer transformer = getTransformer();
+        configureTransformer(transformer, exchange);
+
+        ResultHandler resultHandler = resultHandlerFactory.createResult(exchange);
+        Result result = resultHandler.getResult();
+        // let's copy the headers before we invoke the transform in case they modify them
+        Message out = exchange.getOut();
+        out.copyFrom(exchange.getIn());
+
+        // the underlying input stream, which we need to close to avoid locking files or other resources
+        InputStream is = null;
+        try {
+            Source source = sourceHandlerFactory.getSource(exchange);
+            if (source instanceof SAXSource) {
+                tryAddEntityResolver((SAXSource) source);
+            }
+
+            LOG.trace("Using {} as source", source);
+            transformer.transform(source, result);
+            LOG.trace("Transform complete with result {}", result);
+            resultHandler.setBody(out);
+        } finally {
+            releaseTransformer(transformer);
+            // IOHelper can handle if is is null
+            IOHelper.close(is);
+        }
+    }
+
+    // Builder methods
+    // -------------------------------------------------------------------------
+
+    /**
+     * Creates an XSLT processor using the given templates instance
+     */
+    public static XsltBuilder xslt(Templates templates) {
+        return new XsltBuilder(templates);
+    }
+
+    /**
+     * Creates an XSLT processor using the given XSLT source
+     */
+    public static XsltBuilder xslt(Source xslt) throws TransformerConfigurationException {
+        notNull(xslt, "xslt");
+        XsltBuilder answer = new XsltBuilder();
+        answer.setTransformerSource(xslt);
+        return answer;
+    }
+
+    /**
+     * Creates an XSLT processor using the given XSLT source
+     */
+    public static XsltBuilder xslt(File xslt) throws TransformerConfigurationException {
+        notNull(xslt, "xslt");
+        return xslt(new StreamSource(xslt));
+    }
+
+    /**
+     * Creates an XSLT processor using the given XSLT source
+     */
+    public static XsltBuilder xslt(URL xslt) throws TransformerConfigurationException, IOException {
+        notNull(xslt, "xslt");
+        return xslt(xslt.openStream());
+    }
+
+    /**
+     * Creates an XSLT processor using the given XSLT source
+     */
+    public static XsltBuilder xslt(InputStream xslt) throws TransformerConfigurationException, IOException {
+        notNull(xslt, "xslt");
+        return xslt(new StreamSource(xslt));
+    }
+
+    /**
+     * Sets the output as being a byte[]
+     */
+    public XsltBuilder outputBytes() {
+        setResultHandlerFactory(new StreamResultHandlerFactory());
+        return this;
+    }
+
+    /**
+     * Sets the output as being a String
+     */
+    public XsltBuilder outputString() {
+        setResultHandlerFactory(new StringResultHandlerFactory());
+        return this;
+    }
+
+    /**
+     * Sets the output as being a DOM
+     */
+    public XsltBuilder outputDOM() {
+        setResultHandlerFactory(new DomResultHandlerFactory());
+        return this;
+    }
+
+    /**
+     * Sets the output as being a File where the filename
+     * must be provided in the {@link Exchange#XSLT_FILE_NAME} header.
+     */
+    public XsltBuilder outputFile() {
+        setResultHandlerFactory(new FileResultHandlerFactory());
+        return this;
+    }
+
+    /**
+     * Should the output file be deleted when the {@link Exchange} is done.
+     * <p/>
+     * This option should only be used if you use {@link #outputFile()} as well.
+     */
+    public XsltBuilder deleteOutputFile() {
+        this.deleteOutputFile = true;
+        return this;
+    }
+
+    public XsltBuilder parameter(String name, Object value) {
+        parameters.put(name, value);
+        return this;
+    }
+
+    /**
+     * Sets a custom URI resolver to be used
+     */
+    public XsltBuilder uriResolver(URIResolver uriResolver) {
+        setUriResolver(uriResolver);
+        return this;
+    }
+
+    /**
+     * Enables to allow using StAX.
+     * <p/>
+     * When enabled StAX is preferred as the first choice as {@link Source}.
+     */
+    public XsltBuilder allowStAX() {
+        setAllowStAX(true);
+        return this;
+    }
+
+    /**
+     * Used for caching {@link Transformer}s.
+     * <p/>
+     * By default no caching is in use.
+     *
+     * @param numberToCache the maximum number of transformers to cache
+     */
+    public XsltBuilder transformerCacheSize(int numberToCache) {
+        if (numberToCache > 0) {
+            transformers = new ArrayBlockingQueue<>(numberToCache);
+        } else {
+            transformers = null;
+        }
+        return this;
+    }
+
+    /**
+     * Uses a custom {@link ErrorListener}.
+     */
+    public XsltBuilder errorListener(ErrorListener errorListener) {
+        setErrorListener(errorListener);
+        return this;
+    }
+
+    // Properties
+    // -------------------------------------------------------------------------
+
+    public Map<String, Object> getParameters() {
+        return parameters;
+    }
+
+    public void setParameters(Map<String, Object> parameters) {
+        this.parameters = parameters;
+    }
+
+    public void setTemplate(Templates template) {
+        this.template = template;
+        if (transformers != null) {
+            transformers.clear();
+        }
+    }
+
+    public Templates getTemplate() {
+        return template;
+    }
+
+    public boolean isFailOnNullBody() {
+        return failOnNullBody;
+    }
+
+    public void setFailOnNullBody(boolean failOnNullBody) {
+        this.failOnNullBody = failOnNullBody;
+    }
+
+    public SourceHandlerFactory getSourceHandlerFactory() {
+        return sourceHandlerFactory;
+    }
+
+    public void setSourceHandlerFactory(SourceHandlerFactory sourceHandlerFactory) {
+        this.sourceHandlerFactory = sourceHandlerFactory;
+    }
+
+    public ResultHandlerFactory getResultHandlerFactory() {
+        return resultHandlerFactory;
+    }
+
+    public void setResultHandlerFactory(ResultHandlerFactory resultHandlerFactory) {
+        this.resultHandlerFactory = resultHandlerFactory;
+    }
+
+    public boolean isAllowStAX() {
+        return allowStAX;
+    }
+
+    public void setAllowStAX(boolean allowStAX) {
+        this.allowStAX = allowStAX;
+    }
+
+    /**
+     * Sets the XSLT transformer from a Source
+     *
+     * @param source the source
+     * @throws TransformerConfigurationException is thrown if creating a XSLT transformer failed.
+     */
+    public void setTransformerSource(Source source) throws TransformerConfigurationException {
+        TransformerFactory factory = converter.getTransformerFactory();
+        if (errorListener != null) {
+            factory.setErrorListener(errorListener);
+        } else {
+            // use a logger error listener so users can see from the logs what the error may be
+            factory.setErrorListener(new XsltErrorListener());
+        }
+        if (getUriResolver() != null) {
+            factory.setURIResolver(getUriResolver());
+        }
+
+        // Check that the call to newTemplates() returns a valid template instance.
+        // In case of an xslt parse error, it will return null and we should stop the
+        // deployment and raise an exception as the route will not be setup properly.
+        Templates templates = factory.newTemplates(source);
+        if (templates != null) {
+            setTemplate(templates);
+        } else {
+            throw new TransformerConfigurationException("Error creating XSLT template. "
+                    + "This is most likely be caused by a XML parse error. "
+                    + "Please verify your XSLT file configured.");
+        }
+    }
+
+    /**
+     * Sets the XSLT transformer from a File
+     */
+    public void setTransformerFile(File xslt) throws TransformerConfigurationException {
+        setTransformerSource(new StreamSource(xslt));
+    }
+
+    /**
+     * Sets the XSLT transformer from a URL
+     */
+    public void setTransformerURL(URL url) throws TransformerConfigurationException, IOException {
+        notNull(url, "url");
+        setTransformerInputStream(url.openStream());
+    }
+
+    /**
+     * Sets the XSLT transformer from the given input stream
+     */
+    public void setTransformerInputStream(InputStream in) throws TransformerConfigurationException, IOException {
+        notNull(in, "InputStream");
+        setTransformerSource(new StreamSource(in));
+    }
+
+    public URIResolver getUriResolver() {
+        return uriResolver;
+    }
+
+    public void setUriResolver(URIResolver uriResolver) {
+        this.uriResolver = uriResolver;
+    }
+
+    public void setEntityResolver(EntityResolver entityResolver) {
+        this.entityResolver = entityResolver;
+    }
+
+    public boolean isDeleteOutputFile() {
+        return deleteOutputFile;
+    }
+
+    public void setDeleteOutputFile(boolean deleteOutputFile) {
+        this.deleteOutputFile = deleteOutputFile;
+    }
+
+    public ErrorListener getErrorListener() {
+        return errorListener;
+    }
+
+    public void setErrorListener(ErrorListener errorListener) {
+        this.errorListener = errorListener;
+    }
+
+    // Implementation methods
+    // -------------------------------------------------------------------------
+    public void setTransformerFactory(TransformerFactory transformerFactory) {
+        this.converter.setTransformerFactory(transformerFactory);
+    }
+
+    private void releaseTransformer(Transformer transformer) {
+        if (transformers != null) {
+            transformer.reset();
+            transformers.offer(transformer);
+        }
+    }
+
+    private Transformer getTransformer() throws Exception {
+        Transformer t = null;
+        if (transformers != null) {
+            t = transformers.poll();
+        }
+        if (t == null) {
+            t = createTransformer();
+        }
+        return t;
+    }
+
+    protected Transformer createTransformer() throws Exception {
+        return getTemplate().newTransformer();
+    }
+
+    private void tryAddEntityResolver(SAXSource source) {
+        //expecting source to have not null XMLReader
+        if (this.entityResolver != null && source != null) {
+            source.getXMLReader().setEntityResolver(this.entityResolver);
+        }
+    }
+
+    /**
+     * Configures the transformer with exchange specific parameters
+     */
+    protected void configureTransformer(Transformer transformer, Exchange exchange) throws Exception {
+        if (uriResolver == null) {
+            uriResolver = new XsltUriResolver(exchange.getContext(), null);
+        }
+        transformer.setURIResolver(uriResolver);
+        if (errorListener == null) {
+            // set our error listener so we can capture errors and report them back on the exchange
+            transformer.setErrorListener(new DefaultTransformErrorHandler(exchange));
+        } else {
+            // use custom error listener
+            transformer.setErrorListener(errorListener);
+        }
+
+        transformer.clearParameters();
+        addParameters(transformer, exchange.getProperties());
+        addParameters(transformer, exchange.getIn().getHeaders());
+        addParameters(transformer, getParameters());
+        transformer.setParameter("exchange", exchange);
+        transformer.setParameter("in", exchange.getIn());
+        transformer.setParameter("out", exchange.getOut());
+    }
+
+    protected void addParameters(Transformer transformer, Map<String, Object> map) {
+        Set<Map.Entry<String, Object>> propertyEntries = map.entrySet();
+        for (Map.Entry<String, Object> entry : propertyEntries) {
+            String key = entry.getKey();
+            Object value = entry.getValue();
+            if (value != null) {
+                LOG.trace("Transformer set parameter {} -> {}", key, value);
+                transformer.setParameter(key, value);
+            }
+        }
+    }
+
+    private static final class XsltBuilderOnCompletion extends SynchronizationAdapter {
+        private final String fileName;
+
+        private XsltBuilderOnCompletion(String fileName) {
+            this.fileName = fileName;
+        }
+
+        @Override
+        public void onDone(Exchange exchange) {
+            FileUtil.deleteFile(new File(fileName));
+        }
+
+        @Override
+        public String toString() {
+            return "XsltBuilderOnCompletion";
+        }
+    }
+
+}
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/XsltHelper.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/XsltHelper.java
new file mode 100644
index 0000000..1034aef
--- /dev/null
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/XsltHelper.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xj;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.xslt.XsltComponent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.xml.XMLConstants;
+import javax.xml.transform.TransformerFactory;
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Map;
+
+// todo 1:1 copy from XsltComponent
+
+final class XsltHelper {
+    private static final Logger LOG = LoggerFactory.getLogger(XsltHelper.class);
+
+    private static final String SAXON_CONFIGURATION_CLASS_NAME = "net.sf.saxon.Configuration";
+    private static final String SAXON_EXTENDED_FUNCTION_DEFINITION_CLASS_NAME = "net.sf.saxon.lib.ExtensionFunctionDefinition";
+
+    private XsltHelper() {
+    }
+
+    public static void registerSaxonConfiguration(
+            CamelContext camelContext, Class<?> factoryClass, TransformerFactory factory, Object saxonConfiguration) throws Exception {
+
+        if (saxonConfiguration != null) {
+            Class<?> configurationClass = camelContext.getClassResolver().resolveClass(SAXON_CONFIGURATION_CLASS_NAME);
+            if (configurationClass != null) {
+                Method method = factoryClass.getMethod("setConfiguration", configurationClass);
+                if (method != null) {
+                    method.invoke(factory, configurationClass.cast(saxonConfiguration));
+                }
+            }
+        }
+    }
+
+    public static void registerSaxonConfigurationProperties(
+            CamelContext camelContext, Class<?> factoryClass, TransformerFactory factory, Map<String, Object> saxonConfigurationProperties) throws Exception {
+
+        if (saxonConfigurationProperties != null && !saxonConfigurationProperties.isEmpty()) {
+            Method method = factoryClass.getMethod("getConfiguration");
+            if (method != null) {
+                Object configuration = method.invoke(factory);
+                if (configuration != null) {
+                    method = configuration.getClass().getMethod("setConfigurationProperty", String.class, Object.class);
+                    for (Map.Entry<String, Object> entry : saxonConfigurationProperties.entrySet()) {
+                        method.invoke(configuration, entry.getKey(), entry.getValue());
+                    }
+                }
+            }
+        }
+    }
+
+    public static void registerSaxonExtensionFunctions(
+            CamelContext camelContext, Class<?> factoryClass, TransformerFactory factory, List<Object> saxonExtensionFunctions) throws Exception {
+
+        if (saxonExtensionFunctions != null && !saxonExtensionFunctions.isEmpty()) {
+            Method method = factoryClass.getMethod("getConfiguration");
+            if (method != null) {
+                Object configuration = method.invoke(factory);
+                if (configuration != null) {
+                    Class<?> extensionClass = camelContext.getClassResolver().resolveMandatoryClass(
+                            SAXON_EXTENDED_FUNCTION_DEFINITION_CLASS_NAME, XsltComponent.class.getClassLoader()
+                    );
+
+                    method = configuration.getClass().getMethod("registerExtensionFunction", extensionClass);
+                    if (method != null) {
+                        factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
+                        for (Object extensionFunction : saxonExtensionFunctions) {
+                            if (extensionClass.isInstance(extensionFunction)) {
+                                LOG.debug("Saxon.registerExtensionFunction {}", extensionFunction);
+                                method.invoke(configuration, extensionFunction);
+                            }
+                        }
+                    } else {
+                        LOG.warn("Unable to get reference to method registerExtensionFunction on {}", configuration.getClass().getName());
+                    }
+                } else {
+                    LOG.warn("Unable to get Saxon configuration ({}) on {}", SAXON_CONFIGURATION_CLASS_NAME, factory.getClass().getName());
+                }
+            } else {
+                LOG.warn("Unable to get reference to method getConfiguration on {}", factoryClass.getName());
+            }
+        }
+    }
+}
diff --git a/components/camel-xj/src/main/resources/org/apache/camel/component/xj/identity.xsl b/components/camel-xj/src/main/resources/org/apache/camel/component/xj/identity.xsl
new file mode 100644
index 0000000..62b2384
--- /dev/null
+++ b/components/camel-xj/src/main/resources/org/apache/camel/component/xj/identity.xsl
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="#all">
+    <xsl:template match="@*|node()">
+        <xsl:copy>
+            <xsl:apply-templates select="@*|node()"/>
+        </xsl:copy>
+    </xsl:template>
+</xsl:stylesheet>
diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XInputStreamTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XInputStreamTest.java
new file mode 100644
index 0000000..9063cdc
--- /dev/null
+++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XInputStreamTest.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.xj;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.nio.charset.StandardCharsets;
+
+public class J2XInputStreamTest extends CamelTestSupport {
+
+    @Test
+    public void testOutput() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello>world!</hello>");
+        mock.message(0).body().isInstanceOf(String.class);
+
+        template.sendBody("direct:start", new ByteArrayInputStream("{\"hello\": \"world!\"}".getBytes(StandardCharsets.UTF_8)));
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                        .to("xj:hellojson2xml.xsl?transformDirection=JSON2XML")
+                        .to("mock:result");
+            }
+        };
+    }
+}
diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputBytesTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputBytesTest.java
new file mode 100644
index 0000000..191ef51
--- /dev/null
+++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputBytesTest.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.xj;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class J2XOutputBytesTest extends CamelTestSupport {
+
+    @Test
+    public void testOutput() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello>world!</hello>");
+        mock.message(0).body().isInstanceOf(byte[].class);
+
+        template.sendBody("direct:start", "{\"hello\": \"world!\"}");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                        .to("xj:hellojson2xml.xsl?transformDirection=JSON2XML&output=bytes")
+                        .to("mock:result");
+            }
+        };
+    }
+}
diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputFileTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputFileTest.java
new file mode 100644
index 0000000..5be6d26
--- /dev/null
+++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputFileTest.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.xj;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+import java.io.File;
+
+public class J2XOutputFileTest extends CamelTestSupport {
+
+    @Test
+    public void testOutput() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello>world!</hello>");
+        mock.message(0).body().isInstanceOf(File.class);
+
+        template.sendBodyAndHeader("direct:start", "{\"hello\": \"world!\"}", Exchange.XSLT_FILE_NAME, "target/J2XOutputFileTest.xml");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                        .to("xj:hellojson2xml.xsl?transformDirection=JSON2XML&output=file")
+                        .to("mock:result");
+            }
+        };
+    }
+}
diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputIdentityTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputIdentityTest.java
new file mode 100644
index 0000000..2dd75ba
--- /dev/null
+++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputIdentityTest.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.xj;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class J2XOutputIdentityTest extends CamelTestSupport {
+
+    @Test
+    public void testOutput() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+                "<object xmlns:xj=\"http://camel.apache.org/component/xj\" xj:type=\"object\">" +
+                "<object xj:name=\"hello\" xj:type=\"string\">world!</object>" +
+                "</object>");
+        mock.message(0).body().isInstanceOf(String.class);
+
+        template.sendBody("direct:start", "{\"hello\": \"world!\"}");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                        .to("xj:?transformDirection=JSON2XML")
+                        .to("mock:result");
+            }
+        };
+    }
+}
diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputStringTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputStringTest.java
new file mode 100644
index 0000000..633430c
--- /dev/null
+++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/J2XOutputStringTest.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.xj;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class J2XOutputStringTest extends CamelTestSupport {
+
+    @Test
+    public void testOutput() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived("<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello>world!</hello>");
+        mock.message(0).body().isInstanceOf(String.class);
+
+        template.sendBody("direct:start", "{\"hello\": \"world!\"}");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                        .to("xj:hellojson2xml.xsl?transformDirection=JSON2XML&output=string")
+                        .to("mock:result");
+            }
+        };
+    }
+}
diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/JsonXmlStreamReaderTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/JsonXmlStreamReaderTest.java
new file mode 100644
index 0000000..c82b28a
--- /dev/null
+++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/JsonXmlStreamReaderTest.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.xj;
+
+import org.junit.Test;
+
+public class JsonXmlStreamReaderTest {
+
+    @Test
+    public void test1() throws Exception {
+        XJTestUtils.transformJson2XmlAndCompare(null, "json2xml/test1");
+    }
+
+    @Test
+    public void test2() throws Exception {
+        XJTestUtils.transformJson2XmlAndCompare(null, "json2xml/test2");
+    }
+
+    @Test
+    public void test3() throws Exception {
+        XJTestUtils.transformJson2XmlAndCompare(null, "json2xml/test3");
+    }
+
+    @Test
+    public void test4() throws Exception {
+        XJTestUtils.transformJson2XmlAndCompare(null, "json2xml/test4");
+    }
+
+    @Test
+    public void test5() throws Exception {
+        XJTestUtils.transformJson2XmlAndCompare(null, "json2xml/test5");
+    }
+
+    @Test
+    public void test6() throws Exception {
+        XJTestUtils.transformJson2XmlAndCompare(null, "json2xml/test6");
+    }
+
+    @Test
+    public void test7() throws Exception {
+        XJTestUtils.transformJson2XmlAndCompare(null, "json2xml/test7");
+    }
+
+    @Test
+    public void test8() throws Exception {
+        XJTestUtils.transformJson2XmlAndCompare(null, "json2xml/test8");
+    }
+
+    @Test
+    public void test9() throws Exception {
+        XJTestUtils.transformJson2XmlAndCompare(null, "json2xml/test9");
+    }
+
+    @Test
+    public void test10() throws Exception {
+        XJTestUtils.transformJson2XmlAndCompare(null, "json2xml/test10");
+    }
+
+    @Test
+    public void test11() throws Exception {
+        XJTestUtils.transformJson2XmlAndCompare(null, "json2xml/test11");
+    }
+}
diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JInputStreamTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JInputStreamTest.java
new file mode 100644
index 0000000..21e9a97
--- /dev/null
+++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JInputStreamTest.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.xj;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.nio.charset.StandardCharsets;
+
+public class X2JInputStreamTest extends CamelTestSupport {
+
+    @Test
+    public void testOutput() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived("{\"hello\":\"world!\"}");
+        mock.message(0).body().isInstanceOf(String.class);
+
+        template.sendBody("direct:start", new ByteArrayInputStream("<hello>world!</hello>".getBytes(StandardCharsets.UTF_8)));
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                        .to("xj:helloxml2json.xsl?transformDirection=XML2JSON")
+                        .to("mock:result");
+            }
+        };
+    }
+}
diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputBytesTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputBytesTest.java
new file mode 100644
index 0000000..2a06655
--- /dev/null
+++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputBytesTest.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.xj;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class X2JOutputBytesTest extends CamelTestSupport {
+
+    @Test
+    public void testOutput() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived("{\"hello\":\"world!\"}");
+        mock.message(0).body().isInstanceOf(byte[].class);
+
+        template.sendBody("direct:start", "<hello>world!</hello>");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                        .to("xj:helloxml2json.xsl?transformDirection=XML2JSON&output=bytes")
+                        .to("mock:result");
+            }
+        };
+    }
+}
diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputFileTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputFileTest.java
new file mode 100644
index 0000000..6e6e6d3
--- /dev/null
+++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputFileTest.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.xj;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+import java.io.File;
+
+public class X2JOutputFileTest extends CamelTestSupport {
+
+    @Test
+    public void testOutput() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived("{\"hello\":\"world!\"}");
+        mock.message(0).body().isInstanceOf(File.class);
+
+        template.sendBodyAndHeader("direct:start", "<hello>world!</hello>", Exchange.XSLT_FILE_NAME, "target/X2JOutputFileTest.json");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                        .to("xj:helloxml2json.xsl?transformDirection=XML2JSON&output=file")
+                        .to("mock:result");
+            }
+        };
+    }
+}
diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputIdentityTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputIdentityTest.java
new file mode 100644
index 0000000..e68a20f
--- /dev/null
+++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputIdentityTest.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.xj;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class X2JOutputIdentityTest extends CamelTestSupport {
+
+    @Test
+    public void testOutput() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived("{\"#text\":\"world!\"}");
+        mock.message(0).body().isInstanceOf(String.class);
+
+        template.sendBody("direct:start", "<hello>world!</hello>");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                        .to("xj:?transformDirection=XML2JSON")
+                        .to("mock:result");
+            }
+        };
+    }
+}
diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputStringTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputStringTest.java
new file mode 100644
index 0000000..906b0ab
--- /dev/null
+++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/X2JOutputStringTest.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.xj;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class X2JOutputStringTest extends CamelTestSupport {
+
+    @Test
+    public void testOutput() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived("{\"hello\":\"world!\"}");
+        mock.message(0).body().isInstanceOf(String.class);
+
+        template.sendBody("direct:start", "<hello>world!</hello>");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                        .to("xj:helloxml2json.xsl?transformDirection=XML2JSON&output=string")
+                        .to("mock:result");
+            }
+        };
+    }
+}
diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/XJTestUtils.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/XJTestUtils.java
new file mode 100644
index 0000000..edb1ddf
--- /dev/null
+++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/XJTestUtils.java
@@ -0,0 +1,160 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.xj;
+
+import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonParser;
+import org.apache.commons.io.IOUtils;
+import org.junit.Assert;
+import org.skyscreamer.jsonassert.JSONAssert;
+import org.xmlunit.builder.DiffBuilder;
+import org.xmlunit.builder.Input;
+import org.xmlunit.diff.Diff;
+
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.transform.*;
+import javax.xml.transform.stax.StAXResult;
+import javax.xml.transform.stax.StAXSource;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+public class XJTestUtils {
+
+    private XJTestUtils() {
+    }
+
+    public static final TransformerFactory TRANSFORMER_FACTORY = TransformerFactory.newInstance();
+    public static final Map<String, Templates> XSL_TEMPLATES = Collections.synchronizedMap(new HashMap<>());
+
+    public static final JsonFactory JSON_FACTORY = new JsonFactory();
+
+    public static Transformer getTransformer() throws Exception {
+        final Transformer transformer = TRANSFORMER_FACTORY.newTransformer();
+        setPrettyPrinting(transformer);
+
+        return transformer;
+    }
+
+    public static Transformer getTransformer(String xsl) throws TransformerException {
+        final Transformer transformer;
+
+        if (XSL_TEMPLATES.containsKey(xsl)) {
+            transformer = XSL_TEMPLATES.get(xsl).newTransformer();
+        } else {
+            final InputStream xslInputStream = XJTestUtils.class.getClassLoader().getResourceAsStream(xsl);
+            final Templates templates = TRANSFORMER_FACTORY.newTemplates(new StreamSource(xslInputStream));
+            XSL_TEMPLATES.put(xsl, templates);
+
+            transformer = templates.newTransformer();
+        }
+
+        setPrettyPrinting(transformer);
+
+        return transformer;
+    }
+
+    public static void setPrettyPrinting(Transformer transformer) {
+        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+        transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
+    }
+
+    public static void transformXml2JsonAndCompare(String xsl, String testName) throws Exception {
+        final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+        final JsonGenerator jsonGenerator = JSON_FACTORY.createGenerator(byteArrayOutputStream);
+
+        final XmlJsonStreamWriter xmlStreamWriter = new XmlJsonStreamWriter(jsonGenerator);
+        final StAXResult stAXResult = new StAXResult(xmlStreamWriter);
+
+        final InputStream inputFile = XJTestUtils.class.getClassLoader().getResourceAsStream(testName + ".xml");
+        if (inputFile == null) {
+            throw new IOException(testName + ".xml not found");
+        }
+
+        final InputStream referenceFile = XJTestUtils.class.getClassLoader().getResourceAsStream(testName + ".json");
+        if (referenceFile == null) {
+            throw new IOException(testName + ".json not found");
+        }
+
+        final Transformer transformer;
+        if (xsl == null) {
+            transformer = getTransformer();
+        } else {
+            transformer = getTransformer(xsl);
+        }
+        try {
+            transformer.transform(new StreamSource(inputFile), stAXResult);
+        } catch (Exception e) {
+            String result = byteArrayOutputStream.toString("UTF-8");
+            System.out.println(result);
+            throw e;
+        }
+
+        final String expected = IOUtils.toString(referenceFile, "UTF-8");
+        final String result = byteArrayOutputStream.toString("UTF-8");
+
+        JSONAssert.assertEquals(result, expected, result, true);
+    }
+
+    public static void transformJson2XmlAndCompare(String xsl, String testName) throws Exception {
+
+        final InputStream inputFile = XJTestUtils.class.getClassLoader().getResourceAsStream(testName + ".json");
+        if (inputFile == null) {
+            throw new IOException(testName + ".json not found");
+        }
+
+        final InputStream referenceFile = XJTestUtils.class.getClassLoader().getResourceAsStream(testName + ".xml");
+        if (referenceFile == null) {
+            throw new IOException(testName + ".xml not found");
+        }
+
+        final JsonParser jsonParser = JSON_FACTORY.createParser(inputFile);
+
+        final XMLStreamReader xmlStreamReader = new JsonXmlStreamReader(jsonParser);
+
+        final StAXSource stAXSource = new StAXSource(xmlStreamReader);
+
+        final Transformer transformer;
+        if (xsl == null) {
+            transformer = getTransformer();
+        } else {
+            transformer = getTransformer(xsl);
+        }
+
+        final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+        transformer.transform(stAXSource, new StreamResult(byteArrayOutputStream));
+
+        final String expected = IOUtils.toString(referenceFile, "UTF-8");
+        final String result = byteArrayOutputStream.toString("UTF-8");
+
+        final Diff diff = DiffBuilder
+                .compare(Input.fromString(expected))
+                .withTest(Input.fromString(result))
+                .ignoreElementContentWhitespace()
+                .checkForIdentical()
+                .build();
+
+        Assert.assertFalse("\nExpected: " + expected + "\n\nGot: " + result + "\n\nDiff: " + diff.toString(), diff.hasDifferences());
+    }
+}
diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/XmlJsonStreamWriterTest.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/XmlJsonStreamWriterTest.java
new file mode 100644
index 0000000..8c930ce
--- /dev/null
+++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/XmlJsonStreamWriterTest.java
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.xj;
+
+import org.junit.Test;
+
+public class XmlJsonStreamWriterTest {
+
+    @Test
+    public void test1() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test1");
+    }
+
+    @Test
+    public void test2() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test2");
+    }
+
+    @Test
+    public void test3() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test3");
+    }
+
+    @Test
+    public void test4() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test4");
+    }
+
+    @Test
+    public void test5() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test5");
+    }
+
+    @Test
+    public void test6() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test6");
+    }
+
+    @Test
+    public void test7() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test7");
+    }
+
+    @Test
+    public void test8() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test8");
+    }
+
+    @Test
+    public void test9() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test9");
+    }
+
+    @Test
+    public void test10() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test10");
+    }
+
+    @Test
+    public void test11() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test11");
+    }
+
+    @Test
+    public void test12() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test12");
+    }
+
+    @Test
+    public void test13() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test13");
+    }
+
+    @Test
+    public void test14() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test14");
+    }
+
+    @Test
+    public void test15() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test15");
+    }
+
+    /*
+    test long mixded text
+     */
+    @Test
+    public void test16() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test16");
+    }
+
+    @Test
+    public void test17() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test17");
+    }
+
+    @Test
+    public void test18() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test18");
+    }
+
+    @Test
+    public void test19() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test19");
+    }
+
+    @Test
+    public void test20() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test20");
+    }
+
+    @Test
+    public void test21() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test21");
+    }
+
+    @Test
+    public void test22() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test22");
+    }
+
+    @Test
+    public void test23() throws Exception {
+        XJTestUtils.transformXml2JsonAndCompare(null, "xml2json/test23");
+    }
+}
diff --git a/components/camel-xj/src/test/resources/hellojson2xml.xsl b/components/camel-xj/src/test/resources/hellojson2xml.xsl
new file mode 100644
index 0000000..a647f95
--- /dev/null
+++ b/components/camel-xj/src/test/resources/hellojson2xml.xsl
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<xsl:stylesheet version="1.0"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                xmlns:xj="http://camel.apache.org/component/xj"
+                exclude-result-prefixes="#all">
+
+    <xsl:output omit-xml-declaration="no" encoding="UTF-8" method="xml" indent="no"/>
+
+    <xsl:template match="/">
+        <xsl:apply-templates select="object[1]/object[1]"/>
+    </xsl:template>
+
+    <xsl:template match="object">
+        <xsl:variable name="name" select="@xj:name"/>
+        <xsl:element name="{$name}">
+            <xsl:value-of select="text()"/>
+        </xsl:element>
+    </xsl:template>
+
+</xsl:stylesheet>
diff --git a/components/camel-xj/src/test/resources/helloxml2json.xsl b/components/camel-xj/src/test/resources/helloxml2json.xsl
new file mode 100644
index 0000000..e2c1e4b
--- /dev/null
+++ b/components/camel-xj/src/test/resources/helloxml2json.xsl
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<xsl:stylesheet version="1.0"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                exclude-result-prefixes="#all">
+
+    <xsl:template match="/">
+        <object>
+            <xsl:copy-of select="*"/>
+        </object>
+    </xsl:template>
+</xsl:stylesheet>
diff --git a/components/camel-xj/src/test/resources/json2xml/test1.json b/components/camel-xj/src/test/resources/json2xml/test1.json
new file mode 100644
index 0000000..bfc6b4f
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test1.json
@@ -0,0 +1,26 @@
+[
+  [
+    "1",
+    "2",
+    "3",
+    "4",
+    "5",
+    "6",
+    "7",
+    "8",
+    "9",
+    "10"
+  ],
+  [
+    "11",
+    "12",
+    "13",
+    "14",
+    "15",
+    "16",
+    "17",
+    "18",
+    "19",
+    "20"
+  ]
+]
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/json2xml/test1.xml b/components/camel-xj/src/test/resources/json2xml/test1.xml
new file mode 100644
index 0000000..b1c51da
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test1.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj" xj:type="array">
+   <object xj:type="array">
+      <object xj:type="string">1</object>
+      <object xj:type="string">2</object>
+      <object xj:type="string">3</object>
+      <object xj:type="string">4</object>
+      <object xj:type="string">5</object>
+      <object xj:type="string">6</object>
+      <object xj:type="string">7</object>
+      <object xj:type="string">8</object>
+      <object xj:type="string">9</object>
+      <object xj:type="string">10</object>
+   </object>
+   <object xj:type="array">
+      <object xj:type="string">11</object>
+      <object xj:type="string">12</object>
+      <object xj:type="string">13</object>
+      <object xj:type="string">14</object>
+      <object xj:type="string">15</object>
+      <object xj:type="string">16</object>
+      <object xj:type="string">17</object>
+      <object xj:type="string">18</object>
+      <object xj:type="string">19</object>
+      <object xj:type="string">20</object>
+   </object>
+</object>
diff --git a/components/camel-xj/src/test/resources/json2xml/test10.json b/components/camel-xj/src/test/resources/json2xml/test10.json
new file mode 100644
index 0000000..7839b61
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test10.json
@@ -0,0 +1,10 @@
+{
+  "id": 1,
+  "type": null,
+  "displayName": true,
+  "firstname": false,
+  "lastname": 1.2,
+  "role": 2.1e10,
+  "base64": "SGFsbG8K",
+  "company": "8"
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/json2xml/test10.xml b/components/camel-xj/src/test/resources/json2xml/test10.xml
new file mode 100644
index 0000000..80b042f
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test10.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj" xj:type="object">
+   <object xj:name="id" xj:type="int">1</object>
+   <object xj:name="type" xj:type="null">null</object>
+   <object xj:name="displayName" xj:type="boolean">true</object>
+   <object xj:name="firstname" xj:type="boolean">false</object>
+   <object xj:name="lastname" xj:type="float">1.2</object>
+   <object xj:name="role" xj:type="float">2.1e10</object>
+   <object xj:name="base64" xj:type="string">SGFsbG8K</object>
+   <object xj:name="company" xj:type="string">8</object>
+</object>
diff --git a/components/camel-xj/src/test/resources/json2xml/test11.json b/components/camel-xj/src/test/resources/json2xml/test11.json
new file mode 100644
index 0000000..50b7d21
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test11.json
@@ -0,0 +1,3 @@
+{
+  "test": "<!DOCTYPE html>\n      <html class=\"client-nojs\" lang=\"de\" dir=\"ltr\">\n      <head>\n      <meta charset=\"UTF-8\"/>\n      <title>Extensible Markup Language – Wikipedia</title>\n      <script>document.documentElement.className=document.documentElement.className.replace(/(^|\\s)client-nojs(\\s|$)/,\"$1client-js$2\");RLCONF={\"wgCanonicalNamespace\":\"\",\"wgCanonicalSpecialPageName\":!1,\"wgNamespaceNumber\":0,\"wgPageName\":\"Extensible_Markup_Language\",\"wgTitle\":\"E [...]
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/json2xml/test11.xml b/components/camel-xj/src/test/resources/json2xml/test11.xml
new file mode 100644
index 0000000..8036503
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test11.xml
@@ -0,0 +1,712 @@
+<?xml version="1.0" encoding="UTF-8"?><object xmlns:xj="http://camel.apache.org/component/xj" xj:type="object">
+   <object xj:name="test" xj:type="string">&lt;!DOCTYPE html&gt;
+      &lt;html class="client-nojs" lang="de" dir="ltr"&gt;
+      &lt;head&gt;
+      &lt;meta charset="UTF-8"/&gt;
+      &lt;title&gt;Extensible Markup Language – Wikipedia&lt;/title&gt;
+      &lt;script&gt;document.documentElement.className=document.documentElement.className.replace(/(^|\s)client-nojs(\s|$)/,"$1client-js$2");RLCONF={"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":!1,"wgNamespaceNumber":0,"wgPageName":"Extensible_Markup_Language","wgTitle":"Extensible Markup Language","wgCurRevisionId":190034957,"wgRevisionId":190034957,"wgArticleId":5730,"wgIsArticle":!0,"wgIsRedirect":!1,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["W [...]
+      "Jul.","Aug.","Sep.","Okt.","Nov.","Dez."],"wgRelevantPageName":"Extensible_Markup_Language","wgRelevantArticleId":5730,"wgRequestId":"XSlhkwpAMFEAACn1mTgAAAAA","wgCSPNonce":!1,"wgIsProbablyEditable":!0,"wgRelevantPageIsProbablyEditable":!0,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgFlaggedRevsParams":{"tags":{"accuracy":{"levels":1,"quality":2,"pristine":4}}},"wgStableRevisionId":190034957,"wgMediaViewerOnClick":!0,"wgMediaViewerEnabledByDefault":!0,"wgPopupsReferencePreview [...]
+      "ext.globalCssJs.user.styles":"ready","ext.globalCssJs.site.styles":"ready","site.styles":"ready","noscript":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","ext.globalCssJs.site":"ready","user":"ready","user.options":"loading","user.tokens":"loading","ext.flaggedRevs.icons":"ready","oojs-ui-core.styles":"ready","oojs-ui.styles.indicators":"ready","mediawiki.widgets.styles":"ready","oojs-ui-core.icons":"ready","ext.cite.styles":"ready","ext.pygments":"ready","mediawiki [...]
+      "ext.flaggedRevs.advanced","ext.gadget.editMenus","ext.gadget.WikiMiniAtlas","ext.gadget.OpenStreetMap","ext.gadget.CommonsDirekt","ext.centralauth.centralautologin","mmv.head","mmv.bootstrap.autostart","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.compactlinks","ext.uls.interface","ext.quicksurveys.init","ext.centralNotice.geoIP","ext.centralNotice.startUp","skins.v [...]
+      &lt;script&gt;(RLQ=window.RLQ||[]).push(function(){mw.loader.implement("user.options@1wzrrbt",function($,jQuery,require,module){/*@nomin*/mw.user.options.set({"variant":"de"});
+      });mw.loader.implement("user.tokens@0tffind",function($,jQuery,require,module){/*@nomin*/mw.user.tokens.set({"editToken":"+\\","patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"});
+      });});&lt;/script&gt;
+      &lt;link rel="stylesheet" href="/w/load.php?lang=de&amp;modules=ext.3d.styles%7Cext.cite.styles%7Cext.flaggedRevs.basic%2Cicons%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cmediawiki.legacy.commonPrint%2Cshared%7Cmediawiki.skinning.interface%7Cmediawiki.toc.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.styles%7Cwikibase.client.init&amp;only=styles&amp;skin=vec [...]
+      &lt;script async="" src="/w/load.php?lang=de&amp;modules=startup&amp;only=scripts&amp;raw=1&amp;skin=vector"&gt;&lt;/script&gt;
+      &lt;meta name="ResourceLoaderDynamicStyles" content=""/&gt;
+      &lt;link rel="stylesheet" href="/w/load.php?lang=de&amp;modules=site.styles&amp;only=styles&amp;skin=vector"/&gt;
+      &lt;meta name="generator" content="MediaWiki 1.34.0-wmf.13"/&gt;
+      &lt;meta name="referrer" content="origin"/&gt;
+      &lt;meta name="referrer" content="origin-when-crossorigin"/&gt;
+      &lt;meta name="referrer" content="origin-when-cross-origin"/&gt;
+      &lt;meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/XML_%28de%29.svg/1200px-XML_%28de%29.svg.png"/&gt;
+      &lt;link rel="alternate" href="android-app://org.wikipedia/http/de.m.wikipedia.org/wiki/Extensible_Markup_Language"/&gt;
+      &lt;link rel="alternate" type="application/x-wiki" title="Seite bearbeiten" href="/w/index.php?title=Extensible_Markup_Language&amp;action=edit"/&gt;
+      &lt;link rel="edit" title="Seite bearbeiten" href="/w/index.php?title=Extensible_Markup_Language&amp;action=edit"/&gt;
+      &lt;link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"/&gt;
+      &lt;link rel="shortcut icon" href="/static/favicon/wikipedia.ico"/&gt;
+      &lt;link rel="search" type="application/opensearchdescription+xml" href="/w/opensearch_desc.php" title="Wikipedia (de)"/&gt;
+      &lt;link rel="EditURI" type="application/rsd+xml" href="//de.wikipedia.org/w/api.php?action=rsd"/&gt;
+      &lt;link rel="license" href="//creativecommons.org/licenses/by-sa/3.0/"/&gt;
+      &lt;link rel="canonical" href="https://de.wikipedia.org/wiki/Extensible_Markup_Language"/&gt;
+      &lt;link rel="dns-prefetch" href="//login.wikimedia.org"/&gt;
+      &lt;link rel="dns-prefetch" href="//meta.wikimedia.org" /&gt;
+      &lt;!--[if lt IE 9]&gt;&lt;script src="/w/resources/lib/html5shiv/html5shiv.js"&gt;&lt;/script&gt;&lt;![endif]--&gt;
+      &lt;/head&gt;
+      &lt;body class="mediawiki ltr sitedir-ltr capitalize-all-nouns mw-hide-empty-elt ns-0 ns-subject mw-editable page-Extensible_Markup_Language rootpage-Extensible_Markup_Language skin-vector action-view"&gt;
+      &lt;div id="mw-page-base" class="noprint"&gt;&lt;/div&gt;
+      &lt;div id="mw-head-base" class="noprint"&gt;&lt;/div&gt;
+      &lt;div id="content" class="mw-body" role="main"&gt;
+      &lt;a id="top"&gt;&lt;/a&gt;
+      &lt;div id="siteNotice" class="mw-body-content"&gt;&lt;!-- CentralNotice --&gt;&lt;/div&gt;
+      &lt;div class="mw-indicators mw-body-content"&gt;
+      &lt;/div&gt;
+
+      &lt;h1 id="firstHeading" class="firstHeading" lang="de"&gt;Extensible Markup Language&lt;/h1&gt;
+
+      &lt;div id="bodyContent" class="mw-body-content"&gt;
+      &lt;div id="siteSub" class="noprint"&gt;aus Wikipedia, der freien Enzyklopädie&lt;/div&gt;
+      &lt;div id="contentSub"&gt;&lt;/div&gt;
+
+
+
+      &lt;div id="jump-to-nav"&gt;&lt;/div&gt;
+      &lt;a class="mw-jump-link" href="#mw-head"&gt;Zur Navigation springen&lt;/a&gt;
+      &lt;a class="mw-jump-link" href="#p-search"&gt;Zur Suche springen&lt;/a&gt;
+      &lt;div id="mw-content-text" lang="de" dir="ltr" class="mw-content-ltr"&gt;&lt;div class="mw-parser-output"&gt;&lt;table class="infobox float-right toptextcells hintergrundfarbe1" id="vorlage-infobox-dateiformat" summary="Infobox Dateiformat" style="width:23em; margin: 0 0 1em 1em; border:solid 1px #BBBBBB; font-size: 90%; padding:2px;"&gt;
+
+      &lt;tbody&gt;&lt;tr&gt;
+      &lt;th colspan="2" style="text-align: center;"&gt;Extensible Markup Language
+      &lt;/th&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td colspan="2" style="text-align:center;"&gt;&lt;a href="/wiki/Datei:XML_(de).svg" class="image" title="XML-Beispiel"&gt;&lt;img alt="XML-Beispiel" src="//upload.wikimedia.org/wikipedia/commons/thumb/e/e9/XML_%28de%29.svg/200px-XML_%28de%29.svg.png" decoding="async" width="200" height="228" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/e/e9/XML_%28de%29.svg/300px-XML_%28de%29.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/e9/XML_%28de%29.svg/400px-XML_% [...]
+      &lt;/td&gt;&lt;/tr&gt;
+
+
+
+
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;"&gt;&lt;a href="/wiki/Dateinamenserweiterung" title="Dateinamenserweiterung"&gt;Dateiendung&lt;/a&gt;:
+      &lt;/td&gt;
+      &lt;td&gt;&lt;code style="margin:0.2em; padding:0;"&gt;.xml&lt;/code&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td style="white-space:nowrap;"&gt;&lt;a href="/wiki/Internet_Media_Type" title="Internet Media Type"&gt;MIME-Type&lt;/a&gt;:
+      &lt;/td&gt;
+      &lt;td&gt;&lt;span class="mw-code" style="line-height: 1.1em; margin:0.2em; padding:0;"&gt;application/xml, text/xml&lt;/span&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td style="white-space: wrap;"&gt;&lt;a href="/wiki/Magische_Zahl_(Informatik)" title="Magische Zahl (Informatik)"&gt;Magische Zahl&lt;/a&gt;:
+      &lt;/td&gt;
+      &lt;td&gt;&lt;span style="background:#DDD; padding-left:3px; padding-right:3px; font-family:monospace;"&gt;3C 3F 78 6D 6C&lt;/span&gt; &lt;sub&gt;&lt;small&gt;&lt;a href="/wiki/Hexadezimalsystem" title="Hexadezimalsystem"&gt;hex&lt;/a&gt;&lt;/small&gt;&lt;/sub&gt;&lt;br /&gt; &lt;span style="background:#DDD; padding-left:3px; padding-right:3px; font-family:monospace;"&gt;&lt;?xml&lt;/span&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;"&gt;Entwickelt von:
+      &lt;/td&gt;
+      &lt;td&gt;&lt;a href="/wiki/World_Wide_Web_Consortium" title="World Wide Web Consortium"&gt;World Wide Web Consortium&lt;/a&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+
+
+
+
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;"&gt;Art:
+      &lt;/td&gt;
+      &lt;td&gt;&lt;a href="/wiki/Auszeichnungssprache" title="Auszeichnungssprache"&gt;Auszeichnungssprache&lt;/a&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+
+
+
+
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;"&gt;Erweitert von:
+      &lt;/td&gt;
+      &lt;td&gt;&lt;a href="/wiki/Standard_Generalized_Markup_Language" title="Standard Generalized Markup Language"&gt;SGML&lt;/a&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;"&gt;Erweitert zu:
+      &lt;/td&gt;
+      &lt;td&gt;&lt;a href="/wiki/XHTML" class="mw-redirect" title="XHTML"&gt;XHTML&lt;/a&gt;, &lt;a href="/wiki/RSS_(Web-Feed)" title="RSS (Web-Feed)"&gt;RSS&lt;/a&gt;, &lt;a href="/wiki/Atom_(Format)" title="Atom (Format)"&gt;Atom&lt;/a&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+
+
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;"&gt;&lt;a href="/wiki/Website" title="Website"&gt;Website&lt;/a&gt;:
+      &lt;/td&gt;
+      &lt;td&gt;&lt;a rel="nofollow" class="external text" href="http://www.w3.org/TR/2008/REC-xml-20081126/"&gt;1.0 (Fifth Edition)&lt;/a&gt;&lt;br /&gt;&lt;a rel="nofollow" class="external text" href="http://www.w3.org/TR/2006/REC-xml11-20060816/"&gt;1.1 (Second Edition)&lt;/a&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td colspan="2" style="display:none"&gt;&lt;a href="/w/index.php?title=Vorlage:Infobox_Dateiformat/Wartung/MagischeZahl_fehlt&amp;action=edit&amp;redlink=1" class="new" title="Vorlage:Infobox Dateiformat/Wartung/MagischeZahl fehlt (Seite nicht vorhanden)"&gt;&lt;/a&gt;
+      &lt;p&gt;&lt;br /&gt;
+      &lt;a href="/w/index.php?title=Vorlage:Infobox_Dateiformat/Wartung/Standard_fehlt&amp;action=edit&amp;redlink=1" class="new" title="Vorlage:Infobox Dateiformat/Wartung/Standard fehlt (Seite nicht vorhanden)"&gt;&lt;/a&gt;
+      &lt;/p&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td colspan="2"&gt;
+      &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
+      &lt;p&gt;Die &lt;b&gt;Extensible Markup Language&lt;/b&gt; (dt. &lt;i&gt;Erweiterbare Auszeichnungssprache&lt;/i&gt;), abgekürzt &lt;b&gt;XML&lt;/b&gt;, ist eine &lt;a href="/wiki/Auszeichnungssprache" title="Auszeichnungssprache"&gt;Auszeichnungssprache&lt;/a&gt; zur Darstellung hierarchisch strukturierter Daten im Format einer &lt;a href="/wiki/Textdatei" title="Textdatei"&gt;Textdatei&lt;/a&gt;, die sowohl von &lt;a href="/wiki/Menschenlesbarkeit" title="Menschenlesbarkeit"&gt;M [...]
+      &lt;/p&gt;&lt;p&gt;XML wird auch für den plattform- und &lt;a href="/wiki/Implementierung" title="Implementierung"&gt;implementationsunabhängigen&lt;/a&gt; Austausch von Daten zwischen &lt;a href="/wiki/Computer" title="Computer"&gt;Computersystemen&lt;/a&gt; eingesetzt, insbesondere über das &lt;a href="/wiki/Internet" title="Internet"&gt;Internet&lt;/a&gt;, und wurde vom &lt;a href="/wiki/World_Wide_Web_Consortium" title="World Wide Web Consortium"&gt;World Wide Web Consortium&lt [...]
+      &lt;/p&gt;&lt;p&gt;Die Standardzeichenkodierung eines XML-Dokumentes ist &lt;a href="/wiki/UTF-8" title="UTF-8"&gt;UTF-8&lt;/a&gt;. XML-bearbeitende Systeme müssen die Kodierungen UTF-8 und &lt;a href="/wiki/UTF-16" title="UTF-16"&gt;UTF-16&lt;/a&gt; beherrschen.&lt;sup id="cite_ref-3" class="reference"&gt;&lt;a href="#cite_note-3"&gt;&#91;3&#93;&lt;/a&gt;&lt;/sup&gt; XML-Dokumente, die UTF-8 oder UTF-16 verwenden, können in allen Texteditoren, die diese Kodierungen unterstützen, a [...]
+      &lt;/p&gt;&lt;p&gt;Wenn das XML-Dokument Binärdaten enthalten soll, müssen diese Daten als Text umkodiert werden. Dazu kann z.&#160;B. die &lt;a href="/wiki/Base64" title="Base64"&gt;Base64&lt;/a&gt;-Kodierung verwendet werden.
+      &lt;/p&gt;
+      &lt;div id="toc" class="toc"&gt;&lt;input type="checkbox" role="button" id="toctogglecheckbox" class="toctogglecheckbox" style="display:none" /&gt;&lt;div class="toctitle" lang="de" dir="ltr"&gt;&lt;h2&gt;Inhaltsverzeichnis&lt;/h2&gt;&lt;span class="toctogglespan"&gt;&lt;label class="toctogglelabel" for="toctogglecheckbox"&gt;&lt;/label&gt;&lt;/span&gt;&lt;/div&gt;
+      &lt;ul&gt;
+      &lt;li class="toclevel-1 tocsection-1"&gt;&lt;a href="#Fachbegriffe"&gt;&lt;span class="tocnumber"&gt;1&lt;/span&gt; &lt;span class="toctext"&gt;Fachbegriffe&lt;/span&gt;&lt;/a&gt;
+      &lt;ul&gt;
+      &lt;li class="toclevel-2 tocsection-2"&gt;&lt;a href="#Element"&gt;&lt;span class="tocnumber"&gt;1.1&lt;/span&gt; &lt;span class="toctext"&gt;Element&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-3"&gt;&lt;a href="#Tag"&gt;&lt;span class="tocnumber"&gt;1.2&lt;/span&gt; &lt;span class="toctext"&gt;Tag&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-4"&gt;&lt;a href="#Wohlgeformtheit"&gt;&lt;span class="tocnumber"&gt;1.3&lt;/span&gt; &lt;span class="toctext"&gt;Wohlgeformtheit&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-5"&gt;&lt;a href="#Gültigkeit_(Validität)"&gt;&lt;span class="tocnumber"&gt;1.4&lt;/span&gt; &lt;span class="toctext"&gt;Gültigkeit (Validität)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-6"&gt;&lt;a href="#Parser"&gt;&lt;span class="tocnumber"&gt;1.5&lt;/span&gt; &lt;span class="toctext"&gt;Parser&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-7"&gt;&lt;a href="#Aufbau_eines_XML-Dokuments"&gt;&lt;span class="tocnumber"&gt;2&lt;/span&gt; &lt;span class="toctext"&gt;Aufbau eines XML-Dokuments&lt;/span&gt;&lt;/a&gt;
+      &lt;ul&gt;
+      &lt;li class="toclevel-2 tocsection-8"&gt;&lt;a href="#Physischer_Aufbau"&gt;&lt;span class="tocnumber"&gt;2.1&lt;/span&gt; &lt;span class="toctext"&gt;Physischer Aufbau&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-9"&gt;&lt;a href="#Logischer_Aufbau"&gt;&lt;span class="tocnumber"&gt;2.2&lt;/span&gt; &lt;span class="toctext"&gt;Logischer Aufbau&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-10"&gt;&lt;a href="#DTD"&gt;&lt;span class="tocnumber"&gt;3&lt;/span&gt; &lt;span class="toctext"&gt;DTD&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-11"&gt;&lt;a href="#Lesbarkeit_von_XML-Dokumenten"&gt;&lt;span class="tocnumber"&gt;4&lt;/span&gt; &lt;span class="toctext"&gt;Lesbarkeit von XML-Dokumenten&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-12"&gt;&lt;a href="#Klassifizierung_von_XML-Dokumenten"&gt;&lt;span class="tocnumber"&gt;5&lt;/span&gt; &lt;span class="toctext"&gt;Klassifizierung von XML-Dokumenten&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-13"&gt;&lt;a href="#Verarbeitung_von_XML"&gt;&lt;span class="tocnumber"&gt;6&lt;/span&gt; &lt;span class="toctext"&gt;Verarbeitung von XML&lt;/span&gt;&lt;/a&gt;
+      &lt;ul&gt;
+      &lt;li class="toclevel-2 tocsection-14"&gt;&lt;a href="#Verarbeitungskriterien"&gt;&lt;span class="tocnumber"&gt;6.1&lt;/span&gt; &lt;span class="toctext"&gt;Verarbeitungskriterien&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-15"&gt;&lt;a href="#Programmgesteuerter_Zugriff_auf_XML-Dokumente"&gt;&lt;span class="tocnumber"&gt;6.2&lt;/span&gt; &lt;span class="toctext"&gt;Programmgesteuerter Zugriff auf XML-Dokumente&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-16"&gt;&lt;a href="#XML-Parser-API-Beispiele"&gt;&lt;span class="tocnumber"&gt;6.3&lt;/span&gt; &lt;span class="toctext"&gt;XML-Parser-API-Beispiele&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-17"&gt;&lt;a href="#Transformation_und_Darstellung_von_XML-Dokumenten"&gt;&lt;span class="tocnumber"&gt;6.4&lt;/span&gt; &lt;span class="toctext"&gt;Transformation und Darstellung von XML-Dokumenten&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-18"&gt;&lt;a href="#Schemasprachen"&gt;&lt;span class="tocnumber"&gt;7&lt;/span&gt; &lt;span class="toctext"&gt;Schemasprachen&lt;/span&gt;&lt;/a&gt;
+      &lt;ul&gt;
+      &lt;li class="toclevel-2 tocsection-19"&gt;&lt;a href="#XML_Schema/XSD"&gt;&lt;span class="tocnumber"&gt;7.1&lt;/span&gt; &lt;span class="toctext"&gt;XML Schema/XSD&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-20"&gt;&lt;a href="#Weitere_Schemasprachen"&gt;&lt;span class="tocnumber"&gt;7.2&lt;/span&gt; &lt;span class="toctext"&gt;Weitere Schemasprachen&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-21"&gt;&lt;a href="#XML-Familie"&gt;&lt;span class="tocnumber"&gt;8&lt;/span&gt; &lt;span class="toctext"&gt;XML-Familie&lt;/span&gt;&lt;/a&gt;
+      &lt;ul&gt;
+      &lt;li class="toclevel-2 tocsection-22"&gt;&lt;a href="#Infrastruktur"&gt;&lt;span class="tocnumber"&gt;8.1&lt;/span&gt; &lt;span class="toctext"&gt;Infrastruktur&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-23"&gt;&lt;a href="#Sprachen"&gt;&lt;span class="tocnumber"&gt;8.2&lt;/span&gt; &lt;span class="toctext"&gt;Sprachen&lt;/span&gt;&lt;/a&gt;
+      &lt;ul&gt;
+      &lt;li class="toclevel-3 tocsection-24"&gt;&lt;a href="#Text"&gt;&lt;span class="tocnumber"&gt;8.2.1&lt;/span&gt; &lt;span class="toctext"&gt;Text&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-3 tocsection-25"&gt;&lt;a href="#Grafik"&gt;&lt;span class="tocnumber"&gt;8.2.2&lt;/span&gt; &lt;span class="toctext"&gt;Grafik&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-3 tocsection-26"&gt;&lt;a href="#Geodaten"&gt;&lt;span class="tocnumber"&gt;8.2.3&lt;/span&gt; &lt;span class="toctext"&gt;Geodaten&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-3 tocsection-27"&gt;&lt;a href="#Multimedia"&gt;&lt;span class="tocnumber"&gt;8.2.4&lt;/span&gt; &lt;span class="toctext"&gt;Multimedia&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-3 tocsection-28"&gt;&lt;a href="#Sicherheit"&gt;&lt;span class="tocnumber"&gt;8.2.5&lt;/span&gt; &lt;span class="toctext"&gt;Sicherheit&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-3 tocsection-29"&gt;&lt;a href="#Ingenieurwissenschaften"&gt;&lt;span class="tocnumber"&gt;8.2.6&lt;/span&gt; &lt;span class="toctext"&gt;Ingenieurwissenschaften&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-3 tocsection-30"&gt;&lt;a href="#Weitere"&gt;&lt;span class="tocnumber"&gt;8.2.7&lt;/span&gt; &lt;span class="toctext"&gt;Weitere&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-31"&gt;&lt;a href="#Alternative_Formate"&gt;&lt;span class="tocnumber"&gt;9&lt;/span&gt; &lt;span class="toctext"&gt;Alternative Formate&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-32"&gt;&lt;a href="#Trivia"&gt;&lt;span class="tocnumber"&gt;10&lt;/span&gt; &lt;span class="toctext"&gt;Trivia&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-33"&gt;&lt;a href="#Literatur"&gt;&lt;span class="tocnumber"&gt;11&lt;/span&gt; &lt;span class="toctext"&gt;Literatur&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-34"&gt;&lt;a href="#Weblinks"&gt;&lt;span class="tocnumber"&gt;12&lt;/span&gt; &lt;span class="toctext"&gt;Weblinks&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-35"&gt;&lt;a href="#Einzelnachweise"&gt;&lt;span class="tocnumber"&gt;13&lt;/span&gt; &lt;span class="toctext"&gt;Einzelnachweise&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;/div&gt;
+
+      &lt;h2&gt;&lt;span class="mw-headline" id="Fachbegriffe"&gt;Fachbegriffe&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=1" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Fachbegriffe"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language [...]
+      &lt;h3&gt;&lt;span class="mw-headline" id="Element"&gt;Element&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=2" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Element"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action=edi [...]
+      &lt;p&gt;Die wichtigste Struktureinheit eines XML-Dokumentes ist das &lt;a href="/w/index.php?title=Element_(Markierungssprache)&amp;action=edit&amp;redlink=1" class="new" title="Element (Markierungssprache) (Seite nicht vorhanden)"&gt;Element&lt;/a&gt;. Elemente können Text wie auch weitere Elemente als Inhalt enthalten. Elemente bilden die &lt;i&gt;Knoten&lt;/i&gt; des Strukturbaumes eines XML-Dokumentes. Der Name eines XML-Elementes kann in XML-Dokumenten ohne &lt;a href="/wiki/ [...]
+      &lt;/p&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="Tag"&gt;Tag&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=3" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Tag"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action=edit&amp;sectio [...]
+      &lt;p&gt;Für die Auszeichnung von Elementen werden Tags (Auszeichnungen) verwendet:
+      &lt;/p&gt;
+      &lt;ul&gt;&lt;li&gt;ein Starttag für den Beginn eines Elementes: &lt;code&gt;&lt;Elementname&gt;&lt;/code&gt;&lt;/li&gt;
+      &lt;li&gt;ein Endtag für das Ende eines Elementes: &lt;code&gt;&lt;/Elementname&gt;&lt;/code&gt;&lt;/li&gt;
+      &lt;li&gt;ein Leertag für ein Element ohne Inhalt: &lt;code&gt;&lt;Leerelementname/&gt;&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
+      &lt;p&gt;Siehe Hauptartikel &lt;a href="/wiki/Tag_(Informatik)" title="Tag (Informatik)"&gt;Tag&lt;/a&gt;
+      &lt;/p&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="Wohlgeformtheit"&gt;Wohlgeformtheit&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=4" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Wohlgeformtheit"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup [...]
+      &lt;p&gt;Ein XML-Dokument heißt „wohlgeformt“ (oder &lt;span style="font-style:normal;font-weight:normal"&gt;&lt;a href="/wiki/Englische_Sprache" title="Englische Sprache"&gt;englisch&lt;/a&gt;&lt;/span&gt; &lt;span lang="en-Latn" style="font-style:italic"&gt;well-formed&lt;/span&gt;), wenn es alle XML-Regeln einhält. Beispielhaft seien hier folgende genannt:
+      &lt;/p&gt;
+      &lt;ul&gt;&lt;li&gt;Das Dokument besitzt genau ein Wurzelelement. Als Wurzelelement wird dabei das jeweils äußerste Element bezeichnet, z.&#160;B. &lt;code&gt;&lt;html&gt;&lt;/code&gt; in &lt;a href="/wiki/Extensible_Hypertext_Markup_Language" title="Extensible Hypertext Markup Language"&gt;XHTML&lt;/a&gt;.&lt;/li&gt;
+      &lt;li&gt;Alle Elemente mit Inhalt besitzen einen Start- und einen Endtag (z.&#160;B. &lt;code&gt;&lt;eintrag&gt;Eintrag 1&lt;/eintrag&gt;&lt;/code&gt;). Elemente ohne Inhalt können mit einem Leertag gekennzeichnet werden (z.&#160;B. &lt;code&gt;&lt;eintrag /&gt;&lt;/code&gt;).&lt;/li&gt;
+      &lt;li&gt;Die Start- und Endtags sind ebenentreu-paarig verschachtelt. Das bedeutet, dass alle Elemente  geschlossen werden müssen, bevor die End-Auszeichner des entsprechenden Elternelements oder die Beginn-Auszeichner eines Geschwisterelements erscheinen.&lt;/li&gt;
+      &lt;li&gt;Ein Element darf nicht mehrere &lt;a href="/wiki/Attribut_(Auszeichnungssprache)" title="Attribut (Auszeichnungssprache)"&gt;Attribute&lt;/a&gt; mit demselben Namen besitzen.&lt;/li&gt;
+      &lt;li&gt;Attributwerte müssen in &lt;a href="/wiki/Anf%C3%BChrungszeichen" title="Anführungszeichen"&gt;Anführungszeichen&lt;/a&gt; stehen (&lt;code&gt;"..."&lt;/code&gt; oder  &lt;code&gt;'...'&lt;/code&gt;).&lt;/li&gt;
+      &lt;li&gt;Die Start- und Endtags beachten die Groß- und Kleinschreibung (z.&#160;B. &lt;code&gt;&lt;eintrag&gt;&lt;/Eintrag&gt;&lt;/code&gt; ist nicht gültig).&lt;/li&gt;&lt;/ul&gt;
+      &lt;h3&gt;&lt;span id="G.C3.BCltigkeit_.28Validit.C3.A4t.29"&gt;&lt;/span&gt;&lt;span class="mw-headline" id="Gültigkeit_(Validität)"&gt;Gültigkeit (Validität)&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=5" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Gültigkeit (Validität)"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw- [...]
+      &lt;p&gt;Soll XML für den &lt;a href="/wiki/Datenaustausch" title="Datenaustausch"&gt;Datenaustausch&lt;/a&gt; verwendet werden, ist es von Vorteil, wenn das Format mittels einer &lt;a href="/wiki/Formale_Grammatik" title="Formale Grammatik"&gt;Grammatik&lt;/a&gt; (z.&#160;B. einer &lt;a href="/wiki/Dokumenttypdefinition" title="Dokumenttypdefinition"&gt;Dokumenttypdefinition&lt;/a&gt; oder eines &lt;a href="/wiki/XML_Schema" title="XML Schema"&gt;XML-Schemas&lt;/a&gt;) definiert i [...]
+      &lt;/p&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="Parser"&gt;Parser&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=6" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Parser"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action=edit&a [...]
+      &lt;p&gt;&lt;a href="/wiki/Computerprogramm" title="Computerprogramm"&gt;Programme&lt;/a&gt; oder Programmteile, die XML-Daten auslesen, interpretieren und ggf. auf Gültigkeit prüfen, nennt man &lt;i&gt;XML-&lt;a href="/wiki/Parser" title="Parser"&gt;Parser&lt;/a&gt;&lt;/i&gt;. Prüft der Parser die Gültigkeit, so ist er ein &lt;i&gt;validierender&lt;/i&gt; Parser.
+      &lt;/p&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="Aufbau_eines_XML-Dokuments"&gt;Aufbau eines XML-Dokuments&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=7" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Aufbau eines XML-Dokuments"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/ [...]
+      &lt;p&gt;&lt;i&gt;Beispiel einer XML-Datei&lt;/i&gt;
+      &lt;/p&gt;
+      &lt;div class="mw-highlight mw-content-ltr" dir="ltr"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="cp"&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;verzeichnis&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;titel&gt;&lt;/span&gt;Wikipedia Städteverzeichnis&lt;span class="nt"&gt;&lt;/titel&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;eintrag&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;stichwort&gt;&lt;/span&gt;Genf&lt;span class="nt"&gt;&lt;/stichwort&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;eintragstext&gt;&lt;/span&gt;Genf ist der Sitz von ...&lt;span class="nt"&gt;&lt;/eintragstext&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;/eintrag&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;eintrag&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;stichwort&gt;&lt;/span&gt;Köln&lt;span class="nt"&gt;&lt;/stichwort&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;eintragstext&gt;&lt;/span&gt;Köln ist eine Stadt, die ...&lt;span class="nt"&gt;&lt;/eintragstext&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;/eintrag&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;/verzeichnis&gt;&lt;/span&gt;
+      &lt;/pre&gt;&lt;/div&gt;
+      &lt;p&gt;XML-Dokumente besitzen einen physischen und einen logischen Aufbau.
+      &lt;/p&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="Physischer_Aufbau"&gt;Physischer Aufbau&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=8" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Physischer Aufbau"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_ [...]
+      &lt;ul&gt;&lt;li&gt;Die Dokument-Entität (engl. &lt;i&gt;Document entity&lt;/i&gt;) enthält das Hauptdokument.&lt;/li&gt;
+      &lt;li&gt;Weitere mögliche Entitäten sind über
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/Entit%C3%A4ten_in_Auszeichnungssprachen" class="mw-redirect" title="Entitäten in Auszeichnungssprachen"&gt;Entitätenreferenzen&lt;/a&gt; (&lt;code&gt;&lt;i&gt;&amp;name;&lt;/i&gt;&lt;/code&gt; für das Dokument bzw. &lt;code&gt;&lt;i&gt;%name;&lt;/i&gt;&lt;/code&gt; für die Dokumenttypdefinition) eingebundene Zeichenketten, eventuell auch ganze Dateien, sowie Referenzen auf Zeichenentitäten zur Einbindung einzelner Zeichen, die über ihre Nummer  [...]
+      &lt;li&gt;Eine &lt;a href="/wiki/XML-Deklaration" title="XML-Deklaration"&gt;XML-Deklaration&lt;/a&gt; wird verwendet, um XML-Version, Zeichenkodierung und eine mögliche Verarbeitbarkeit ohne &lt;a href="/wiki/Dokumenttypdefinition" title="Dokumenttypdefinition"&gt;DTD&lt;/a&gt; zu spezifizieren.&lt;/li&gt;
+      &lt;li&gt;Eine &lt;a href="/wiki/Dokumenttypdefinition" title="Dokumenttypdefinition"&gt;Dokumenttypdefinition&lt;/a&gt; wird verwendet, um Entitäten sowie den erlaubten logischen Aufbau zu spezifizieren. Die Verwendung einer &lt;a href="/wiki/Dokumenttypdefinition" title="Dokumenttypdefinition"&gt;DTD&lt;/a&gt; kann in der &lt;a href="/wiki/XML-Deklaration" title="XML-Deklaration"&gt;XML-Deklaration&lt;/a&gt; abgewählt werden.&lt;/li&gt;&lt;/ul&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="Logischer_Aufbau"&gt;Logischer Aufbau&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=9" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Logischer Aufbau"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Mar [...]
+      &lt;p&gt;Der logische Aufbau entspricht einer Baumstruktur und ist damit hierarchisch organisiert.
+      Als Baumknoten gibt es:
+      &lt;/p&gt;
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/Element_(Auszeichnungssprache)" title="Element (Auszeichnungssprache)"&gt;Elemente&lt;/a&gt;, deren physische Auszeichnung mittels
+      &lt;ul&gt;&lt;li&gt;eines passenden Paars aus Starttag &lt;code&gt;&lt;&lt;i&gt;Tagname&lt;/i&gt;&gt;&lt;/code&gt; und End-Tag &lt;code&gt;&lt;/&lt;i&gt;Tagname&lt;/i&gt;&gt;&lt;/code&gt; oder&lt;/li&gt;
+      &lt;li&gt;eines Leertags &lt;code&gt;&lt;&lt;i&gt;Tagname&lt;/i&gt;/&gt;&lt;/code&gt; erfolgen kann,&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Attribut_(Auszeichnungssprache)" title="Attribut (Auszeichnungssprache)"&gt;Attribute&lt;/a&gt; als bei einem Starttag oder Leertag geschriebene zusätzliche Eigenschaften der Elemente in der Syntax &lt;code&gt;&lt;i&gt;Attributname&lt;/i&gt;="&lt;i&gt;Attributwert&lt;/i&gt;"&lt;/code&gt;,&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Verarbeitungsanweisung" title="Verarbeitungsanweisung"&gt;Verarbeitungsanweisungen&lt;/a&gt; &lt;code&gt;&lt;?&lt;i&gt;Zielname&lt;/i&gt;&#160;Daten?&gt;&lt;/code&gt; (engl. &lt;i&gt;Processing Instructions&lt;/i&gt;),&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Kommentar_(Programmierung)" title="Kommentar (Programmierung)"&gt;Kommentare&lt;/a&gt; &lt;code&gt;&lt;!--&#160;&lt;i&gt;Kommentar-Text&lt;/i&gt;&#160;--&gt;&lt;/code&gt;, und&lt;/li&gt;
+      &lt;li&gt;Text, der als normale Zeichendaten oder in Form eines &lt;a href="/wiki/CDATA" title="CDATA"&gt;CDATA&lt;/a&gt;-Abschnittes &lt;code&gt;&lt;![CDATA[&#160;&lt;i&gt;beliebiger Text&lt;/i&gt;]]&gt;&lt;/code&gt; auftreten kann.&lt;/li&gt;&lt;/ul&gt;
+      &lt;p&gt;Ein XML-Dokument muss genau ein Element auf der obersten Ebene enthalten. Unterhalb dieses Dokumentelements können weitere Elemente und Text verschachtelt werden.
+      &lt;/p&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="DTD"&gt;DTD&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=10" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: DTD"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action=edit&amp;secti [...]
+      &lt;div class="hauptartikel" role="navigation"&gt;&lt;span class="hauptartikel-pfeil" title="siehe" role="presentation"&gt;→ &lt;/span&gt;&lt;i&gt;&lt;span class="hauptartikel-text"&gt;Hauptartikel&lt;/span&gt;: &lt;a href="/wiki/Dokumenttypdefinition" title="Dokumenttypdefinition"&gt;Dokumenttypdefinition&lt;/a&gt;&lt;/i&gt;&lt;/div&gt;
+      &lt;p&gt;Eine Dokumenttypdefinition (DTD) beschreibt die Struktur und Grammatik von Dokumenten. Sie ist Systembestandteil von XML und per Standard aktiviert.
+      &lt;/p&gt;&lt;p&gt;Werden Dokumente &lt;b&gt;mit&lt;/b&gt; Bezug zu einer externen Dokumenttypdefinition oder &lt;b&gt;mit&lt;/b&gt; einer integrierten Dokumenttypdefinition erstellt, so prüft der Parser das Dokument bereits beim Öffnen (Lesen). Ein Dokument auf Basis einer Dokumenttypdefinition ist stets ein valides Dokument. Die Übereinstimmung des Dokumentinhaltes mit den Regeln der Dokumenttypdefinition steht im Vordergrund. Die technische Lesbarkeit, also auch das Lesen von ni [...]
+      &lt;/p&gt;&lt;p&gt;Dokumente &lt;b&gt;ohne&lt;/b&gt; DTD sind eher für den beliebigen Datenaustausch geeignet. Der Parser prüft diese Dokumente nur nach den Regeln der Wohlgeformtheit. Die technische Lesbarkeit steht hier an erster Stelle. Das Prüfen und Auslesen der eigentlichen Informationen wird mit nachgelagerten Prozessen realisiert.
+      &lt;/p&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="Lesbarkeit_von_XML-Dokumenten"&gt;Lesbarkeit von XML-Dokumenten&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=11" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Lesbarkeit von XML-Dokumenten"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a [...]
+      &lt;p&gt;Praktisch alle &lt;a href="/wiki/Webbrowser" title="Webbrowser"&gt;Webbrowser&lt;/a&gt; wie &lt;a href="/wiki/Apple_Safari" title="Apple Safari"&gt;Apple Safari&lt;/a&gt;, &lt;a href="/wiki/Google_Chrome" title="Google Chrome"&gt;Google Chrome&lt;/a&gt;, &lt;a href="/wiki/Internet_Explorer" title="Internet Explorer"&gt;Microsoft Internet Explorer&lt;/a&gt;, &lt;a href="/wiki/Mozilla_Firefox" title="Mozilla Firefox"&gt;Mozilla Firefox&lt;/a&gt; und &lt;a href="/wiki/Opera_( [...]
+      &lt;/p&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="Klassifizierung_von_XML-Dokumenten"&gt;Klassifizierung von XML-Dokumenten&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=12" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Klassifizierung von XML-Dokumenten"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt [...]
+      &lt;p&gt;XML-Dokumente lassen sich anhand ihres beabsichtigten Gebrauchs und ihres Strukturierungsgrads in dokumentzentrierte und datenzentrierte Dokumente unterteilen. Die Grenze zwischen diesen Dokumentenarten ist jedoch fließend. Mischformen können als &lt;i&gt;semistrukturiert&lt;/i&gt; bezeichnet werden.
+      &lt;/p&gt;
+      &lt;ul&gt;&lt;li&gt;dokumentzentriert: Das Dokument ist an ein Textdokument angelehnt, das für den menschlichen Leser größtenteils auch ohne die zusätzliche Metainformation verständlich ist. XML-Elemente werden hauptsächlich zur &lt;a href="/wiki/Formale_Semantik#Formale_Semantik_in_der_Informatik" title="Formale Semantik"&gt;semantischen&lt;/a&gt; Markierung von Passagen des Dokuments genutzt, das Dokument ist nur schwach strukturiert. Aufgrund der schwachen Strukturierung ist ein [...]
+      &lt;li&gt;datenzentriert: Das Dokument ist hauptsächlich für die maschinelle Verarbeitung bestimmt. Es folgt einem Schema, das Entitäten eines Datenmodells beschreibt und definiert, in welcher Beziehung die Entitäten zueinander stehen, sowie, welche Attribute die Entitäten haben. Das Dokument ist somit stark strukturiert und für den unmittelbaren menschlichen Gebrauch weniger geeignet.&lt;/li&gt;
+      &lt;li&gt;semistrukturiert: Semistrukturierte Dokumente stellen eine Art Mischform dar, die stärker strukturiert ist als dokumentzentrierte Dokumente, aber schwächer als datenzentrierte Dokumente.&lt;/li&gt;&lt;/ul&gt;
+      &lt;p&gt;Es ist typisch für datenzentrierte XML-Dokumente, dass Elemente entweder Elementinhalt oder Textinhalt haben. Der sogenannte gemischte Inhalt (mixed content), bei dem Elemente sowohl Text als auch Kindelemente enthalten, ist für die anderen XML-Dokumente typisch.
+      &lt;/p&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="Verarbeitung_von_XML"&gt;Verarbeitung von XML&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=13" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Verarbeitung von XML"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=E [...]
+      &lt;h3&gt;&lt;span class="mw-headline" id="Verarbeitungskriterien"&gt;Verarbeitungskriterien&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=14" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Verarbeitungskriterien"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?t [...]
+      &lt;p&gt;Grundsätzlich sind drei Aspekte beim Zugriff auf ein XML-Dokument von Bedeutung:
+      &lt;/p&gt;
+      &lt;ul&gt;&lt;li&gt;Wie erfolgt der Zugriff auf die XML-Datei: sequenziell oder wahlfrei?&lt;/li&gt;
+      &lt;li&gt;Wie ist der Ablauf beim Zugriff auf die XML-Daten gestaltet: „Push“ oder „Pull“? (Push bedeutet, dass die Ablaufkontrolle des Programms beim Parser liegt. Pull bedeutet, dass die Ablaufkontrolle im Code, der den Parser aufruft, implementiert ist.)&lt;/li&gt;
+      &lt;li&gt;Wie erfolgt das Baumstrukturmanagement der XML-Daten: hierarchisch oder verschachtelt?&lt;/li&gt;&lt;/ul&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="Programmgesteuerter_Zugriff_auf_XML-Dokumente"&gt;Programmgesteuerter Zugriff auf XML-Dokumente&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=15" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Programmgesteuerter Zugriff auf XML-Dokumente"&gt;Bearbeiten&lt;/a&gt;&lt;span class=" [...]
+      &lt;p&gt;Das Einlesen von XML-Dokumenten erfolgt auf unterster Ebene über eine spezielle Programmkomponente, einen &lt;a href="/wiki/XML-Prozessor" title="XML-Prozessor"&gt;XML-Prozessor&lt;/a&gt;, auch XML-Parser genannt. Er stellt eine &lt;a href="/wiki/Programmierschnittstelle" title="Programmierschnittstelle"&gt;Programmierschnittstelle&lt;/a&gt; (API) zur Verfügung, über die die Anwendung auf das XML-Dokument zugreift.
+      &lt;/p&gt;&lt;p&gt;Die XML-Prozessoren unterstützen dabei drei grundlegende Verarbeitungsmodelle.
+      &lt;/p&gt;
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/Document_Object_Model" title="Document Object Model"&gt;DOM&lt;/a&gt;: Ein DOM-API repräsentiert ein XML-Dokument als Baumstruktur und gewährt wahlfreien Zugriff auf die einzelnen Bestandteile der Baumstruktur. DOM erlaubt außer dem Lesen von XML-Dokumenten auch die Manipulation der Baumstruktur und das Zurückschreiben der Baumstruktur in ein XML-Dokument. Aus diesem Grund ist DOM sehr speicherintensiv.&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Simple_API_for_XML" title="Simple API for XML"&gt;SAX&lt;/a&gt;: Ein SAX-API repräsentiert ein XML-Dokument als sequentiellen Datenstrom und ruft für im Standard definierte Ereignisse vorgegebene Rückruffunktionen (callback function) auf. Eine Anwendung, die SAX nutzt, kann eigene Unterprogramme als Rückruffunktionen registrieren und auf diese Weise die XML-Daten auswerten.&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/w/index.php?title=Pull-API&amp;action=edit&amp;redlink=1" class="new" title="Pull-API (Seite nicht vorhanden)"&gt;Pull-API&lt;/a&gt;: Ein XML-Pull-API verarbeitet Daten sequenziell und bietet sowohl ereignisbasierte Verarbeitung als auch einen &lt;a href="/wiki/Iterator" title="Iterator"&gt;Iterator&lt;/a&gt; an. Es ist hoch speichereffizient und ggf. leichter zu programmieren als das SAX-API, da die Ablaufkontrolle beim Programm und nicht beim Parser liegt.& [...]
+      &lt;p&gt;Weitere Verarbeitungsmodelle:
+      &lt;/p&gt;
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/w/index.php?title=Data_Binding&amp;action=edit&amp;redlink=1" class="new" title="Data Binding (Seite nicht vorhanden)"&gt;Data Binding&lt;/a&gt;: Diese Möglichkeit stellt XML-Daten als Datenstruktur direkt für einen Programmzugriff bereit. Die XML-Daten werden per &lt;a href="/wiki/Unmarshalling" class="mw-redirect" title="Unmarshalling"&gt;Unmarshalling&lt;/a&gt; direkt in z.&#160;B. Objekte gewandelt.&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/w/index.php?title=Nicht_extrahierendes_XML-API&amp;action=edit&amp;redlink=1" class="new" title="Nicht extrahierendes XML-API (Seite nicht vorhanden)"&gt;Nicht extrahierendes XML-API&lt;/a&gt;: Die Daten werden auf Byte-Ebene sehr effizient verarbeitet.&lt;/li&gt;&lt;/ul&gt;
+      &lt;p&gt;Oftmals greift der Anwendungscode nicht direkt auf die Parser-API zu. Stattdessen wird XML weiter &lt;a href="/wiki/Datenkapselung_(Programmierung)" title="Datenkapselung (Programmierung)"&gt;gekapselt&lt;/a&gt;, so dass der Anwendungscode mit nativen Objekten / Datenstrukturen arbeitet, welche sich auf XML abstützen. Beispiele für solche Zugriffsschichten sind &lt;a href="/wiki/JAXB" class="mw-redirect" title="JAXB"&gt;JAXB&lt;/a&gt; in &lt;a href="/wiki/Java_(Programmier [...]
+      &lt;/p&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="XML-Parser-API-Beispiele"&gt;XML-Parser-API-Beispiele&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=16" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: XML-Parser-API-Beispiele"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index [...]
+      &lt;p&gt;XML-Parser-APIs sind für verschiedene Programmiersprachen vorhanden, z.&#160;B. &lt;a href="/wiki/Java_(Programmiersprache)" title="Java (Programmiersprache)"&gt;Java&lt;/a&gt;, &lt;a href="/wiki/C_(Programmiersprache)" title="C (Programmiersprache)"&gt;C&lt;/a&gt;, &lt;a href="/wiki/C%2B%2B" title="C++"&gt;C++&lt;/a&gt;, &lt;a href="/wiki/C-Sharp" title="C-Sharp"&gt;C#&lt;/a&gt;, &lt;a href="/wiki/Python_(Programmiersprache)" title="Python (Programmiersprache)"&gt;Python& [...]
+      &lt;/p&gt;
+      &lt;ul&gt;&lt;li&gt;XML::Parser (&lt;a href="/wiki/Perl_(Programmiersprache)" title="Perl (Programmiersprache)"&gt;Perl&lt;/a&gt;): Ein XML-Parser für Perl. Ein sehr einfaches API bietet z.&#160;B. auch das &lt;a href="/wiki/CPAN" title="CPAN"&gt;CPAN&lt;/a&gt;-Modul XML::Simple an.&lt;/li&gt;
+      &lt;li&gt;DOM Functions (PHP5): Modul in &lt;a href="/wiki/PHP5" class="mw-redirect" title="PHP5"&gt;PHP5&lt;/a&gt;, um XML-Dokumente einzulesen; alternativ simpleXML; für PHP4 gibt es DOM XML.&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Streaming_API_for_XML" title="Streaming API for XML"&gt;StAX (Java)&lt;/a&gt;: Eine hochgradig speichereffiziente Parserimplementierung (Pull) und gleichzeitig einfach zu programmieren. Es werden Cursor- und Iteratorverarbeitungsmodelle angeboten.&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/JAXB" class="mw-redirect" title="JAXB"&gt;JAXB&lt;/a&gt;: Data Binding für Java. Beispielsweise kann aus einem XML-Schema die entsprechende Java-Klasse generiert werden und umgekehrt.&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Apache_XMLBeans" title="Apache XMLBeans"&gt;Apache XMLBeans&lt;/a&gt; Java Data Binding Framework, kann bereits mit Java 1.4.2 verwendet werden&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Xerces" title="Xerces"&gt;Xerces&lt;/a&gt;: Ein validierender XML-Parser für C++, Java und Perl für eine große Anzahl an Plattformen.&lt;/li&gt;
+      &lt;li&gt;&lt;a rel="nofollow" class="external text" href="http://effbot.org/zone/element-iterparse.htm"&gt;ElementTree iterparse&lt;/a&gt;: Ein Parser-API für &lt;a href="/wiki/Python_(Programmiersprache)" title="Python (Programmiersprache)"&gt;Python&lt;/a&gt;, die über Teilbäume iteriert. Es kombiniert die Speichereffizienz eines Pull-Parsers mit der Einfachheit eines DOM-Parsers.&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/w/index.php?title=VTD-XML&amp;action=edit&amp;redlink=1" class="new" title="VTD-XML (Seite nicht vorhanden)"&gt;VTD-XML&lt;/a&gt;: Beispiel für ein nicht extrahierendes XML-API.&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/MSXML" title="MSXML"&gt;MSXML&lt;/a&gt;: Microsoft XML Core Services, die Microsoft XML Softwarebibliothek für XML-Unterstützung über DOM, SAX, XSLT, XML Schemata und andere zu XML gehörende Technologien&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/w/index.php?title=Pugixml&amp;action=edit&amp;redlink=1" class="new" title="Pugixml (Seite nicht vorhanden)"&gt;Pugixml&lt;/a&gt;: Ein DOM XML-Parser für C++ bei dessen Entwicklung besonders Wert auf effizienten Code gelegt wurde.&lt;/li&gt;&lt;/ul&gt;
+      &lt;p&gt;Zur Erstellung von XML-Dokumenten gibt es spezielle Programme, sogenannte &lt;a href="/wiki/XML-Editor" title="XML-Editor"&gt;XML-Editoren&lt;/a&gt;.
+      Zur Speicherung und Verwaltung von XML-Dokumenten gibt es ebenfalls spezielle Programme, sogenannte &lt;a href="/wiki/XML-Datenbank" title="XML-Datenbank"&gt;XML-Datenbanken&lt;/a&gt;.
+      &lt;/p&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="Transformation_und_Darstellung_von_XML-Dokumenten"&gt;Transformation und Darstellung von XML-Dokumenten&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=17" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Transformation und Darstellung von XML-Dokumenten"&gt;Bearbeiten&lt;/a&gt;&lt; [...]
+      &lt;p&gt;Ein XML-Dokument kann mittels geeigneter Transformationssprachen wie &lt;a href="/wiki/XSL_Transformation" title="XSL Transformation"&gt;XSLT&lt;/a&gt; oder &lt;a href="/wiki/Document_Style_Semantics_and_Specification_Language" title="Document Style Semantics and Specification Language"&gt;DSSSL&lt;/a&gt; in ein anderes Dokument transformiert werden. Oftmals dient die Transformation zur Überführung eines Dokuments aus einer XML-Sprache in eine andere XML-Sprache, beispiels [...]
+      &lt;/p&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="Schemasprachen"&gt;Schemasprachen&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=18" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Schemasprachen"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_L [...]
+      &lt;p&gt;Um die Struktur von XML-Sprachen zu beschreiben, bedient man sich sogenannter &lt;i&gt;&lt;a href="/wiki/Schemasprache_(XML)" title="Schemasprache (XML)"&gt;Schemasprachen&lt;/a&gt;&lt;/i&gt;.
+      &lt;/p&gt;
+      &lt;h3&gt;&lt;span id="XML_Schema.2FXSD"&gt;&lt;/span&gt;&lt;span class="mw-headline" id="XML_Schema/XSD"&gt;XML Schema/XSD&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=19" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: XML Schema/XSD"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt [...]
+      &lt;div class="hauptartikel" role="navigation"&gt;&lt;span class="hauptartikel-pfeil" title="siehe" role="presentation"&gt;→ &lt;/span&gt;&lt;i&gt;&lt;span class="hauptartikel-text"&gt;Hauptartikel&lt;/span&gt;: &lt;a href="/wiki/XML_Schema" title="XML Schema"&gt;XML Schema&lt;/a&gt;&lt;/i&gt;&lt;/div&gt;
+      &lt;p&gt;XML Schema (beziehungsweise XSD für XML-Schema-Definition) ist die moderne Möglichkeit, die Struktur von XML-Dokumenten zu beschreiben.
+      XML Schema bietet auch die Möglichkeit, den Inhalt von Elementen und Attributen zu beschränken, z.&#160;B. auf Zahlen, Datumsangaben oder Texte, z.&#160;B. mittels &lt;a href="/wiki/Regul%C3%A4rer_Ausdruck" title="Regulärer Ausdruck"&gt;regulärer Ausdrücke&lt;/a&gt;.
+      Ein Schema ist selbst ein XML-Dokument, welches erlaubt, komplexere (auch inhaltliche) Zusammenhänge zu beschreiben, als dies mit einer formalen DTD möglich ist.
+      &lt;/p&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="Weitere_Schemasprachen"&gt;Weitere Schemasprachen&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=20" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Weitere Schemasprachen"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?t [...]
+      &lt;p&gt;Weitere &lt;a href="/wiki/Schemasprache" class="mw-redirect" title="Schemasprache"&gt;Schemasprachen&lt;/a&gt; sind &lt;a href="/wiki/Document_Structure_Description" title="Document Structure Description"&gt;Document Structure Description&lt;/a&gt;, &lt;a href="/wiki/RELAX_NG" title="RELAX NG"&gt;RELAX NG&lt;/a&gt; und &lt;a href="/wiki/Schematron" title="Schematron"&gt;Schematron&lt;/a&gt;.
+      &lt;/p&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="XML-Familie"&gt;XML-Familie&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=21" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: XML-Familie"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&a [...]
+      &lt;h3&gt;&lt;span class="mw-headline" id="Infrastruktur"&gt;Infrastruktur&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=22" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Infrastruktur"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Lang [...]
+      &lt;p&gt;Im Zusammenhang mit XML wurden vom &lt;a href="/wiki/World_Wide_Web_Consortium" title="World Wide Web Consortium"&gt;W3-Konsortium&lt;/a&gt; auf Basis von XML viele Sprachen definiert, welche XML-Ausdrücke für häufig benötigte allgemeine Funktionen anbieten wie etwa die Verknüpfung von XML-Dokumenten. Zahlreiche XML-Sprachen nutzen diese Grundbausteine.
+      &lt;/p&gt;
+      &lt;ul&gt;&lt;li&gt;Transformation von XML-Dokumenten: &lt;a href="/wiki/XSL_Transformation" title="XSL Transformation"&gt;XSLT&lt;/a&gt;, &lt;a href="/wiki/Streaming_Transformations_for_XML" title="Streaming Transformations for XML"&gt;STX&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Adressierung von Teilen eines XML-Baumes: &lt;a href="/wiki/XPath" title="XPath"&gt;XPath&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Verknüpfung von XML-Ressourcen: &lt;a href="/wiki/XPointer" title="XPointer"&gt;XPointer&lt;/a&gt;, &lt;a href="/wiki/XLink_(Syntax)" title="XLink (Syntax)"&gt;XLink&lt;/a&gt; und &lt;a href="/wiki/XInclude" title="XInclude"&gt;XInclude&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Selektion von Daten aus einem XML-Datensatz: &lt;a href="/wiki/XQuery" title="XQuery"&gt;XQuery&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Datenmanipulation in einem XML-Datensatz: &lt;a href="/wiki/XUpdate" title="XUpdate"&gt;XUpdate&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Abfassen von elektronischen Formularen: &lt;a href="/wiki/XForms" title="XForms"&gt;XForms&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Definition von XML-Datenstrukturen: &lt;a href="/wiki/XML_Schema" title="XML Schema"&gt;XML Schema&lt;/a&gt; (= XSD, XML Schema Definition Language), &lt;a href="/wiki/Dokumenttypdefinition" title="Dokumenttypdefinition"&gt;DTD&lt;/a&gt; und &lt;a href="/wiki/RELAX_NG" title="RELAX NG"&gt;RELAX NG&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Signatur und Verschlüsselung von XML-Knoten: &lt;a href="/wiki/XML_Signature" title="XML Signature"&gt;XML Signature&lt;/a&gt; und &lt;a href="/wiki/XML-Encryption" title="XML-Encryption"&gt;XML-Encryption&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Aussagen zum formellen Informationsgehalt: &lt;a href="/wiki/XML_Information_Set" title="XML Information Set"&gt;XML Infoset&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Formatierte Darstellung von XML-Daten: &lt;a href="/wiki/XSL-FO" class="mw-redirect" title="XSL-FO"&gt;XSL-FO&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Definition zum Methoden- bzw. Funktionsaufruf durch verteilte Systeme: &lt;a href="/wiki/XML-RPC" title="XML-RPC"&gt;XML-RPC&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Standardisierte Attribute: &lt;a href="/wiki/XML_Base" title="XML Base"&gt;XML Base&lt;/a&gt; und ID (DTD)&lt;/li&gt;
+      &lt;li&gt;XML-basierte deklarative Programmiersprache: &lt;a href="/w/index.php?title=MXML&amp;action=edit&amp;redlink=1" class="new" title="MXML (Seite nicht vorhanden)"&gt;MXML&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="Sprachen"&gt;Sprachen&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=23" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Sprachen"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action [...]
+      &lt;p&gt;Heute bedienen sich viele &lt;a href="/wiki/Formale_Sprache" title="Formale Sprache"&gt;formale Sprachen&lt;/a&gt; der Syntax von XML. So ist XML ein wesentliches Instrument, um –&#160;wie es das W3C vorsieht&#160;– eine offene, für Mensch und Maschine verständliche Informationslandschaft (&lt;a href="/wiki/Semantic_Web" title="Semantic Web"&gt;semantic Web&lt;/a&gt;) zu schaffen.
+      &lt;/p&gt;&lt;p&gt;Auch die bekannte Dokumentsprache &lt;a href="/wiki/Hypertext_Markup_Language" title="Hypertext Markup Language"&gt;HTML&lt;/a&gt; wurde als „Extensible HyperText Markup Language“ (&lt;a href="/wiki/Extensible_Hypertext_Markup_Language" title="Extensible Hypertext Markup Language"&gt;XHTML&lt;/a&gt;) im Anschluss an die Version 4.01 in dieses Konzept integriert, so dass ihr nun XML als Definitionsbasis zu Grunde liegt. Vielfacher Grund für den Einsatz von XML ist [...]
+      &lt;/p&gt;&lt;p&gt;Die folgenden Listen stellen einige dieser XML-Sprachen dar.
+      &lt;/p&gt;
+      &lt;h4&gt;&lt;span class="mw-headline" id="Text"&gt;Text&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=24" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Text"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action=edit&amp;se [...]
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/XSL-FO" class="mw-redirect" title="XSL-FO"&gt;XSL-FO&lt;/a&gt; (Textformatierung)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/DocBook" title="DocBook"&gt;DocBook&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Darwin_Information_Typing_Architecture" title="Darwin Information Typing Architecture"&gt;DITA&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Extensible_Hypertext_Markup_Language" title="Extensible Hypertext Markup Language"&gt;XHTML&lt;/a&gt; (XML-konformes HTML)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Text_Encoding_Initiative" title="Text Encoding Initiative"&gt;TEI&lt;/a&gt; (Text Encoding Initiative)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/NITF_(XML)" title="NITF (XML)"&gt;NITF&lt;/a&gt; (News Industry Text Format)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/OPML" class="mw-redirect" title="OPML"&gt;OPML&lt;/a&gt; (Outline Processor Markup Language)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/OSIS" title="OSIS"&gt;OSIS&lt;/a&gt; (Open Scripture Information Standard)&lt;/li&gt;&lt;/ul&gt;
+      &lt;h4&gt;&lt;span class="mw-headline" id="Grafik"&gt;Grafik&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=25" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Grafik"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action=edit& [...]
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/Scalable_Vector_Graphics" title="Scalable Vector Graphics"&gt;SVG&lt;/a&gt; (Vektorgrafiken)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/X3D" title="X3D"&gt;X3D&lt;/a&gt; (3D-Modellierungssprache)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Collaborative_Design_Activity" class="mw-redirect" title="Collaborative Design Activity"&gt;Collada&lt;/a&gt; (Austauschformat für Daten zwischen verschiedenen 3D-Programmen)&lt;/li&gt;&lt;/ul&gt;
+      &lt;h4&gt;&lt;span class="mw-headline" id="Geodaten"&gt;Geodaten&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=26" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Geodaten"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action [...]
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/Geography_Markup_Language" title="Geography Markup Language"&gt;Geography Markup Language&lt;/a&gt; (GML)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/GPS_Exchange_Format" title="GPS Exchange Format"&gt;GPS Exchange Format&lt;/a&gt; (GPX): XML für &lt;a href="/wiki/Global_Positioning_System" title="Global Positioning System"&gt;GPS&lt;/a&gt;-Daten&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Keyhole_Markup_Language" title="Keyhole Markup Language"&gt;Keyhole Markup Language&lt;/a&gt; (KML): Koordinaten-Spezifikation für Google Earth&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/CityGML" class="mw-redirect" title="CityGML"&gt;City Geography Markup Language&lt;/a&gt; (CityGML)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/OpenStreetMap" title="OpenStreetMap"&gt;OpenStreetMap&lt;/a&gt; (OSM)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Normbasierte_Austauschschnittstelle" title="Normbasierte Austauschschnittstelle"&gt;Normbasierte Austauschschnittstelle&lt;/a&gt; (NAS)&lt;/li&gt;&lt;/ul&gt;
+      &lt;h4&gt;&lt;span class="mw-headline" id="Multimedia"&gt;Multimedia&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=27" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Multimedia"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp; [...]
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/Music_Encoding_Initiative" title="Music Encoding Initiative"&gt;MEI&lt;/a&gt; (Music Encoding Initiative)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/MusicXML" title="MusicXML"&gt;MusicXML&lt;/a&gt; (Notendaten, aufgeschriebene Musik)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Synchronized_Multimedia_Integration_Language" title="Synchronized Multimedia Integration Language"&gt;SMIL&lt;/a&gt; (zeitsynchronisierte, multimediale Inhalte)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/MPEG-7" title="MPEG-7"&gt;MPEG-7&lt;/a&gt; (MPEG-7 Metadaten)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/OpenLaszlo" title="OpenLaszlo"&gt;Laszlo&lt;/a&gt; (LZX)&lt;/li&gt;&lt;/ul&gt;
+      &lt;h4&gt;&lt;span class="mw-headline" id="Sicherheit"&gt;&lt;a href="/wiki/Computersicherheit" class="mw-redirect" title="Computersicherheit"&gt;Sicherheit&lt;/a&gt;&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=28" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Sicherheit"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-edit [...]
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/Security_Assertion_Markup_Language" title="Security Assertion Markup Language"&gt;Security Assertion Markup Language&lt;/a&gt; (sicherheitsbezogene Informationen beschreiben und übertragen)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/XML_Signature" title="XML Signature"&gt;XML Signature&lt;/a&gt; (XML-Schreibweise für &lt;a href="/wiki/Digitale_Signatur" title="Digitale Signatur"&gt;digitale Signaturen&lt;/a&gt;)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/XML-Encryption" title="XML-Encryption"&gt;XML-Encryption&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
+      &lt;h4&gt;&lt;span class="mw-headline" id="Ingenieurwissenschaften"&gt;Ingenieurwissenschaften&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=29" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Ingenieurwissenschaften"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.ph [...]
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/AutomationML" title="AutomationML"&gt;AutomationML&lt;/a&gt;, ein Format zur Speicherung von Anlagenplanungsdaten&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/CAEX" title="CAEX"&gt;CAEX&lt;/a&gt;, ein Format zur Speicherung hierarchischer Objektinformationen&lt;/li&gt;
+      &lt;li&gt;GSDML, ein Format zur Beschreibung von Automatisierungsgeräten, die mit &lt;a href="/wiki/Profinet#Engineering" title="Profinet"&gt;Profinet&lt;/a&gt; kommunizieren können&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/IODD" title="IODD"&gt;IODD&lt;/a&gt;, ein Format zur Beschreibung von Sensoren und Aktoren&lt;/li&gt;
+      &lt;li&gt;PLMXML, ein Format zur Beschreibung von Produktdaten als Teil der &lt;a href="/wiki/Siemens_PLM_Software" title="Siemens PLM Software"&gt;Siemens PLM Software&lt;/a&gt;&lt;sup id="cite_ref-4" class="reference"&gt;&lt;a href="#cite_note-4"&gt;&#91;4&#93;&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
+      &lt;li&gt;LandXML, ein Format zur Speicherung georeferenzierter Objekte&lt;/li&gt;
+      &lt;li&gt;RTML (Remote Telescope Markup Language), ein Format für die Beschreibung astronomischer Beobachtungsanfragen&lt;sup id="cite_ref-5" class="reference"&gt;&lt;a href="#cite_note-5"&gt;&#91;5&#93;&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&lt;/ul&gt;
+      &lt;h4&gt;&lt;span class="mw-headline" id="Weitere"&gt;Weitere&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=30" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Weitere"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action=ed [...]
+      &lt;p&gt;Darüber hinaus existieren XML-Sprachen für &lt;a href="/wiki/Webservice" title="Webservice"&gt;Webservices&lt;/a&gt; (z.&#160;B. &lt;a href="/wiki/SOAP" title="SOAP"&gt;SOAP&lt;/a&gt;, &lt;a href="/wiki/Web_Services_Description_Language" title="Web Services Description Language"&gt;WSDL&lt;/a&gt; und &lt;a href="/wiki/WS-*" title="WS-*"&gt;WS-*&lt;/a&gt;), für die Einbindung von &lt;a href="/wiki/Java_(Programmiersprache)" title="Java (Programmiersprache)"&gt;Java&lt;/a&gt [...]
+      &lt;/p&gt;&lt;p&gt;Eine Zusammenfassung von XML-Sprachen für &lt;a href="/wiki/Office-Paket" title="Office-Paket"&gt;Office-Anwendungen&lt;/a&gt; findet sich im &lt;a href="/wiki/OpenDocument" title="OpenDocument"&gt;OpenDocument&lt;/a&gt;-Austauschformat (&lt;i&gt;&lt;a href="/wiki/Organization_for_the_Advancement_of_Structured_Information_Standards" title="Organization for the Advancement of Structured Information Standards"&gt;OASIS&lt;/a&gt; Open Document Format for Office Appl [...]
+      &lt;/p&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="Alternative_Formate"&gt;Alternative Formate&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=31" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Alternative Formate"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Exte [...]
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/Lisp" title="Lisp"&gt;S-Expressions&lt;/a&gt; (Lisp-Syntax für Listen)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/JavaScript_Object_Notation" title="JavaScript Object Notation"&gt;JSON&lt;/a&gt; (JavaScript Object Notation)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/YAML" title="YAML"&gt;YAML&lt;/a&gt; (YAML Ain't Markup Language)&lt;/li&gt;&lt;/ul&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="Trivia"&gt;Trivia&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=32" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Trivia"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action=edit& [...]
+      &lt;p&gt;&lt;a href="/wiki/Linus_Torvalds" title="Linus Torvalds"&gt;Linus Torvalds&lt;/a&gt; bezeichnete XML als Markup-Sprache als wenig geeignet&lt;sup id="cite_ref-6" class="reference"&gt;&lt;a href="#cite_note-6"&gt;&#91;6&#93;&lt;/a&gt;&lt;/sup&gt; (Kommentar Nr. 19):
+      &lt;/p&gt;
+      &lt;div class="Vorlage_Zitat" style="margin:1em 40px;"&gt;
+      &lt;div style="margin:1em 0;"&gt;&lt;blockquote lang="en" style="margin:0;"&gt;
+      &lt;p&gt;“XML is crap. Really. There are no excuses. XML is nasty to parse for humans, and it’s a disaster to parse even for computers. There’s just no reason for that horrible crap to exist.”
+      &lt;/p&gt;
+      &lt;/blockquote&gt;
+      &lt;/div&gt;&lt;div style="margin:-1em 0 1em 1em;"&gt;– &lt;span class="Person"&gt;Linus Torvalds, 2014&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="Literatur"&gt;Literatur&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=33" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Literatur"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;act [...]
+      &lt;ul&gt;&lt;li&gt;Charles F. Goldfarb, Paul Prescod: &lt;cite style="font-style:italic"&gt;XML Handbuch&lt;/cite&gt;. Markt und Technik, München [u.&#160;a.] 1999, &lt;a href="/wiki/Spezial:ISBN-Suche/3827295750" class="internal mw-magiclink-isbn"&gt;ISBN 3-8272-9575-0&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Charles+F.+Goldfarb%2C+Paul [...]
+      &lt;li&gt;Wiebke Möhr, Ingrid Schmidt: &lt;cite style="font-style:italic"&gt;SGML und XML: Anwendungen und Perspektiven&lt;/cite&gt;. Springer-Verlag, Berlin / Heidelberg / New York [u.&#160;a.] 1999, &lt;a href="/wiki/Spezial:ISBN-Suche/3540655433" class="internal mw-magiclink-isbn"&gt;ISBN 3-540-65543-3&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp [...]
+      &lt;li&gt;Robert Eckstein: &lt;cite style="font-style:italic"&gt;XML – kurz &amp; gut&lt;/cite&gt;. O’Reilly Verlag, Cambridge / Köln [u.&#160;a.] 2000, &lt;a href="/wiki/Spezial:ISBN-Suche/3897212196" class="internal mw-magiclink-isbn"&gt;ISBN 3-89721-219-6&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Robert+Eckstein&amp;rft.btitle=XML+-+kur [...]
+      &lt;li&gt;Henning Lobin: &lt;cite style="font-style:italic"&gt;Informationsmodellierung in XML und SGML&lt;/cite&gt;. Springer, Berlin 2000, &lt;a href="/wiki/Spezial:ISBN-Suche/3540653562" class="internal mw-magiclink-isbn"&gt;ISBN 3-540-65356-2&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Henning+Lobin&amp;rft.btitle=Informationsmodellierun [...]
+      &lt;li&gt;Michael Seeboerger-Weichselbaum: &lt;cite style="font-style:italic"&gt;Das Einsteigerseminar XML&lt;/cite&gt;. 2., überarbeitete Auflage. BHV Software, Kaarst 2000, &lt;a href="/wiki/Spezial:ISBN-Suche/3828710182" class="internal mw-magiclink-isbn"&gt;ISBN 3-8287-1018-2&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Michael+Seeboerger [...]
+      &lt;li&gt;Elliotte Rusty Harold: &lt;cite style="font-style:italic"&gt;Die XML Bibel&lt;/cite&gt;. 2. aktualisierte Auflage. mitp, Bonn 2002, &lt;a href="/wiki/Spezial:ISBN-Suche/3826608216" class="internal mw-magiclink-isbn"&gt;ISBN 3-8266-0821-6&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Elliotte+Rusty+Harold&amp;rft.btitle=Die+XML+Bibel& [...]
+      &lt;li&gt;Stefan Mintert: &lt;cite style="font-style:italic"&gt;XML &amp; Co. Die W3C-Spezifikationen für Dokumenten- und Datenarchitektur&lt;/cite&gt;. Addison-Wesley, München 2002, &lt;a href="/wiki/Spezial:ISBN-Suche/3827318440" class="internal mw-magiclink-isbn"&gt;ISBN 3-8273-1844-0&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Stefan+Min [...]
+      &lt;li&gt;Christine Kränzler: &lt;cite style="font-style:italic"&gt;XML/XSL – … für professionelle Einsteiger. für Buch und Web&lt;/cite&gt;. Markt+Technik, München 2002, &lt;a href="/wiki/Spezial:ISBN-Suche/3827263395" class="internal mw-magiclink-isbn"&gt;ISBN 3-8272-6339-5&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Christine+Kr%C3%A4nzle [...]
+      &lt;li&gt;Frank Bitzer: &lt;cite style="font-style:italic"&gt;XML im Unternehmen. Briefing fürs IT-Management&lt;/cite&gt;. Galileo Press, Bonn 2002, &lt;a href="/wiki/Spezial:ISBN-Suche/3898422887" class="internal mw-magiclink-isbn"&gt;ISBN 3-89842-288-7&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Frank+Bitzer&amp;rft.btitle=XML+im+Unterneh [...]
+      &lt;li&gt;Erik T. Ray: &lt;cite style="font-style:italic"&gt;Einführung in XML&lt;/cite&gt;. O’Reilly, 2004, &lt;a href="/wiki/Spezial:ISBN-Suche/3897212862" class="internal mw-magiclink-isbn"&gt;ISBN 3-89721-286-2&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Erik+T.+Ray&amp;rft.btitle=Einf%C3%BChrung+in+XML&amp;rft.date=2004&amp;rft.genre=bo [...]
+      &lt;li&gt;Margit Becher: &lt;cite style="font-style:italic"&gt;XML&#160;: DTD, XML-Schema, XPath, XQuery, XSLT, XSL-FO, SAX, DOM&lt;/cite&gt;. W3L Verlag, Witten 2009, &lt;a href="/wiki/Spezial:ISBN-Suche/9783937137698" class="internal mw-magiclink-isbn"&gt;ISBN 978-3-937137-69-8&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Margit+Becher&amp; [...]
+      &lt;li&gt;Marco Skulschus, Marcus Wiederstein: &lt;cite style="font-style:italic"&gt;XML: Standards und Technologien&lt;/cite&gt;. Comelio Medien, Berlin 2009, &lt;a href="/wiki/Spezial:ISBN-Suche/9783939701217" class="internal mw-magiclink-isbn"&gt;ISBN 978-3-939701-21-7&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Marco+Skulschus%2C+Marcus+ [...]
+      &lt;li&gt;Helmut Vonhoegen: &lt;cite style="font-style:italic"&gt;Einstieg in XML. Aktuelle Standards: XML Schema, XSL, XLink&lt;/cite&gt;. 8. Auflage. Rheinwerk, 2015, &lt;a href="/wiki/Spezial:ISBN-Suche/9783836237987" class="internal mw-magiclink-isbn"&gt;ISBN 978-3-8362-3798-7&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Helmut+Vonhoegen& [...]
+      &lt;h2&gt;&lt;span class="mw-headline" id="Weblinks"&gt;Weblinks&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=34" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Weblinks"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action [...]
+      &lt;div class="sisterproject" style="margin:0.1em 0 0 0;"&gt;&lt;img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/12px-Commons-logo.svg.png" decoding="async" title="Commons" width="12" height="16" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/18px-Commons-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/24px-Commons-logo.svg.png 2x" data-file-width="1024" data-file-height="1376 [...]
+      &lt;div class="sisterproject" style="margin:0.1em 0 0 0;"&gt;&lt;span class="noviewer" role="presentation"&gt;&lt;img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/16px-Wikibooks-logo.svg.png" decoding="async" title="Wikibooks" width="16" height="16" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/24px-Wikibooks-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/32px-Wikibooks [...]
+      &lt;ul&gt;&lt;li&gt;&lt;a rel="nofollow" class="external text" href="http://www.w3.org/XML"&gt;World Wide Web Consortium über XML&lt;/a&gt; (englisch),&lt;br /&gt;&lt;a rel="nofollow" class="external text" href="http://www.edition-w3c.de/"&gt;edition-w3c.de – Deutsche Übersetzungen zu XML u.&#160;a.&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;&lt;a rel="nofollow" class="external text" href="https://www.homepage-webhilfe.de/XML/"&gt;Ausführliche Erklärung zu XML und Tutorials zu diversen XML-Sprachen&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;&lt;a rel="nofollow" class="external text" href="https://curlie.org/World/Deutsch/Computer/Datenformate/Markup_Languages/XML/"&gt;Linkkatalog zum Thema XML&lt;/a&gt; bei &lt;i&gt;curlie.org&lt;/i&gt; (ehemals &lt;a href="/wiki/DMOZ" title="DMOZ"&gt;DMOZ&lt;/a&gt;)&lt;/li&gt;
+      &lt;li&gt;&lt;a rel="nofollow" class="external text" href="http://www.data2type.de/xml-xslt-xslfo/"&gt;Infos zu diversen XML-Technologien wie XSLT, XPath, Schematron, XProc, WordML, XSL-FO&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;&lt;a rel="nofollow" class="external text" href="https://jsonformatter.org/xml-parser"&gt;XML-Parser&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="Einzelnachweise"&gt;Einzelnachweise&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=35" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Einzelnachweise"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Marku [...]
+      &lt;ol class="references"&gt;
+      &lt;li id="cite_note-1"&gt;&lt;span class="mw-cite-backlink"&gt;&lt;a href="#cite_ref-1"&gt;↑&lt;/a&gt;&lt;/span&gt; &lt;span class="reference-text"&gt;&lt;span class="cite"&gt;&lt;a rel="nofollow" class="external text" href="https://web.archive.org/web/20060615212726/http://www.w3.org/TR/1998/REC-xml-19980210"&gt;&lt;i&gt;Extensible Markup Language (XML) 1.0.&lt;/i&gt;&lt;/a&gt;&#32;w3.org,&#32;10.&#160;Februar 1998,&#32;archiviert&#32;vom&#32;&lt;span class="external text"&gt;&lt [...]
+      &lt;/li&gt;
+      &lt;li id="cite_note-2"&gt;&lt;span class="mw-cite-backlink"&gt;&lt;a href="#cite_ref-2"&gt;↑&lt;/a&gt;&lt;/span&gt; &lt;span class="reference-text"&gt;&lt;span class="cite"&gt;&lt;a rel="nofollow" class="external text" href="https://www.w3.org/TR/REC-xml/"&gt;&lt;i&gt;Extensible Markup Language (XML) 1.0 (Fifth Edition).&lt;/i&gt;&lt;/a&gt;&#32;w3.org,&#32;26.&#160;November 2008&#44;&lt;span class="Abrufdatum"&gt;&#32;abgerufen am 12.&#160;Februar 2017&lt;/span&gt;&#32;(englisch). [...]
+      &lt;/li&gt;
+      &lt;li id="cite_note-3"&gt;&lt;span class="mw-cite-backlink"&gt;&lt;a href="#cite_ref-3"&gt;↑&lt;/a&gt;&lt;/span&gt; &lt;span class="reference-text"&gt;&lt;span class="cite"&gt;&lt;a rel="nofollow" class="external text" href="https://www.w3.org/TR/xml/#charsets"&gt;&lt;i&gt;Characters.&lt;/i&gt;&lt;/a&gt;&#32;In:&#32;&lt;i&gt;Extensible Markup Language (XML) 1.0 (Fifth Edition).&lt;/i&gt;&#32;26.&#160;November 2008&#44;&lt;span class="Abrufdatum"&gt;&#32;abgerufen am 9.&#160;März 2 [...]
+      &lt;/li&gt;
+      &lt;li id="cite_note-4"&gt;&lt;span class="mw-cite-backlink"&gt;&lt;a href="#cite_ref-4"&gt;↑&lt;/a&gt;&lt;/span&gt; &lt;span class="reference-text"&gt;&lt;a rel="nofollow" class="external text" href="http://www.plm.automation.siemens.com/de_de/products/open/plmxml/"&gt;plm.automation.siemens.com&lt;/a&gt;&lt;/span&gt;
+      &lt;/li&gt;
+      &lt;li id="cite_note-5"&gt;&lt;span class="mw-cite-backlink"&gt;&lt;a href="#cite_ref-5"&gt;↑&lt;/a&gt;&lt;/span&gt; &lt;span class="reference-text"&gt;Remote Telescope Markup Language (RTML), &lt;a href="/wiki/Bibcode" title="Bibcode"&gt;bibcode&lt;/a&gt;:&lt;a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2006AN....327..751H"&gt;2006AN....327..751H&lt;/a&gt;&lt;/span&gt;
+      &lt;/li&gt;
+      &lt;li id="cite_note-6"&gt;&lt;span class="mw-cite-backlink"&gt;&lt;a href="#cite_ref-6"&gt;↑&lt;/a&gt;&lt;/span&gt; &lt;span class="reference-text"&gt;&lt;cite style="font-style:italic"&gt;Kommentar in Diskussion um XML als Markup-Sprache (06.03.2014)&lt;/cite&gt;. (&lt;a rel="nofollow" class="external text" href="https://plus.google.com/+LinusTorvalds/posts/X2XVf9Q7MfV"&gt;plus.google.com&lt;/a&gt; &#91;abgerufen am 10.&#160;April 2017&#93;).&lt;span class="Z3988" title="ctx_ver= [...]
+      &lt;/li&gt;
+      &lt;/ol&gt;
+      &lt;div id="normdaten" class="catlinks normdaten-typ-s"&gt;Normdaten&#160;(Sachbegriff): &lt;a href="/wiki/Gemeinsame_Normdatei" title="Gemeinsame Normdatei"&gt;GND&lt;/a&gt;: &lt;span class="plainlinks-print"&gt;&lt;a rel="nofollow" class="external text" href="https://d-nb.info/gnd/4501553-3"&gt;4501553-3&lt;/a&gt;&lt;/span&gt; &lt;span class="metadata noprint"&gt;(&lt;a rel="nofollow" class="external text" href="http://swb.bsz-bw.de/DB=2.104/SET=1/TTL=1/CMD?retrace=0&amp;trm_old= [...]
+      &lt;style data-mw-deduplicate="TemplateStyles:r181878932"&gt;.mw-parser-output div.NavFrame{border:1px solid #A2A9B1;clear:both;font-size:95%;margin-top:1.5em;min-height:0;padding:2px;text-align:center}.mw-parser-output div.NavPic{float:left;padding:2px}.mw-parser-output div.NavHead{background-color:#EAECF0;font-weight:bold}.mw-parser-output div.NavFrame:after{clear:both;content:"";display:block}.mw-parser-output div.NavFrame+div.NavFrame,.mw-parser-output div.NavFrame+link+div.Nav [...]
+      &lt;table class="wikitable zebra" style="width:100%;margin:0;text-align:left;font-size:95%;margin-top:.1em;margin-bottom:.0em;"&gt;
+
+
+
+      &lt;tbody&gt;&lt;tr style="display:none"&gt;
+      &lt;td&gt;
+      &lt;/td&gt;
+      &lt;td&gt;
+      &lt;/td&gt;
+      &lt;td&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;text-align: right;background: #DDE5EE;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"&gt;&lt;b&gt;Empfehlungen&lt;/b&gt;
+      &lt;/td&gt;
+      &lt;td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;"&gt;
+      &lt;p&gt;&lt;a href="/w/index.php?title=ActivityPub&amp;action=edit&amp;redlink=1" class="new" title="ActivityPub (Seite nicht vorhanden)"&gt;ActivityPub&lt;/a&gt; • &lt;a href="/wiki/Accessible_Rich_Internet_Applications" title="Accessible Rich Internet Applications"&gt;ARIA&lt;/a&gt; • &lt;a href="/wiki/Canonical_XML" title="Canonical XML"&gt;Canonical XML&lt;/a&gt; • &lt;a href="/wiki/Compound_Document_Formats" title="Compound Document Formats"&gt; CDF&lt;/a&gt; • &lt;a href="/w [...]
+      &lt;/p&gt;
+      &lt;/td&gt;
+      &lt;td style="width:0; padding:0 2px 0 0; border:1px solid transparent; background: transparent;" rowspan="5"&gt;&lt;div class="noviewer"&gt;&lt;a href="/wiki/Datei:W3C%C2%AE_Icon.svg" class="image" title="Logo des World Wide Web Consortiums"&gt;&lt;img alt="Logo des World Wide Web Consortiums" src="//upload.wikimedia.org/wikipedia/commons/thumb/e/ed/W3C%C2%AE_Icon.svg/112px-W3C%C2%AE_Icon.svg.png" decoding="async" width="112" height="76" srcset="//upload.wikimedia.org/wikipedia/co [...]
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;text-align: right;background: #DDE5EE;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"&gt;&lt;b&gt;Arbeitsentwürfe&lt;br /&gt;und Kandidaten&lt;/b&gt;
+      &lt;/td&gt;
+      &lt;td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;"&gt;
+      &lt;p&gt;&lt;a href="/wiki/CCXML" title="CCXML"&gt;CCXML&lt;/a&gt; • &lt;a href="/wiki/CURIE" title="CURIE"&gt;CURIE&lt;/a&gt; • &lt;a href="/wiki/SMIL_Timesheets" title="SMIL Timesheets"&gt;SMIL Timesheets&lt;/a&gt; • &lt;a href="/wiki/SXBL" title="SXBL"&gt;sXBL&lt;/a&gt; • &lt;a href="/w/index.php?title=Web_Integration_Compound_Document&amp;action=edit&amp;redlink=1" class="new" title="Web Integration Compound Document (Seite nicht vorhanden)"&gt; WICD&lt;/a&gt; • &lt;a href="/wi [...]
+      &lt;/p&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;text-align: right;background: #DDE5EE;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"&gt;&lt;b&gt;Anmerkungen&lt;/b&gt;
+      &lt;/td&gt;
+      &lt;td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;"&gt;
+      &lt;p&gt;&lt;a href="/wiki/XAdES" title="XAdES"&gt;XAdES&lt;/a&gt; • &lt;a href="/wiki/Extensible_Forms_Description_Language" title="Extensible Forms Description Language"&gt; XFDL&lt;/a&gt; • &lt;a href="/wiki/XHTML%2BSMIL" title="XHTML+SMIL"&gt;XHTML+SMIL&lt;/a&gt; • &lt;a href="/wiki/Extensible_User_Interface_Protocol" title="Extensible User Interface Protocol"&gt; XUP&lt;/a&gt;
+      &lt;/p&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;text-align: right;background: #DDE5EE;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"&gt;&lt;b&gt;Richtlinien&lt;/b&gt;
+      &lt;/td&gt;
+      &lt;td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;"&gt;
+      &lt;p&gt;&lt;a href="/wiki/Web_Content_Accessibility_Guidelines" title="Web Content Accessibility Guidelines"&gt;Web Content Accessibility Guidelines&lt;/a&gt; • &lt;a href="/w/index.php?title=W3C_MMI&amp;action=edit&amp;redlink=1" class="new" title="W3C MMI (Seite nicht vorhanden)"&gt; Multimodal Interaction Activity&lt;/a&gt; • &lt;a href="/wiki/W3C_Markup_Validation_Service" title="W3C Markup Validation Service"&gt; Markup Validation Service&lt;/a&gt;
+      &lt;/p&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;text-align: right;background: #DDE5EE;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"&gt;&lt;b&gt;Initiativen&lt;/b&gt;
+      &lt;/td&gt;
+      &lt;td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;"&gt;
+      &lt;p&gt;&lt;a href="/wiki/Web_Accessibility_Initiative" title="Web Accessibility Initiative"&gt;Web Accessibility Initiative&lt;/a&gt;
+      &lt;/p&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+      &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;
+      &lt;!--
+      NewPP limit report
+      Parsed by mw1268
+      Cached time: 20190701160511
+      Cache expiry: 2592000
+      Dynamic content: false
+      Complications: []
+      CPU time usage: 0.468 seconds
+      Real time usage: 0.611 seconds
+      Preprocessor visited node count: 3333/1000000
+      Preprocessor generated node count: 0/1500000
+      Post‐expand include size: 52620/2097152 bytes
+      Template argument size: 17707/2097152 bytes
+      Highest expansion depth: 14/40
+      Expensive parser function count: 3/500
+      Unstrip recursion depth: 0/20
+      Unstrip post‐expand size: 6697/5000000 bytes
+      Number of Wikibase entities loaded: 1/400
+      Lua time usage: 0.182/10.000 seconds
+      Lua memory usage: 5.97 MB/50 MB
+      --&gt;
+      &lt;!--
+      Transclusion expansion time report (%,ms,calls,template)
+      100.00%  501.524      1 -total
+      29.70%  148.973      3 Vorlage:Internetquelle
+      20.55%  103.070     14 Vorlage:Literatur
+      14.53%   72.888      1 Vorlage:Navigationsleiste_W3C-Standards
+      13.62%   68.302      1 Vorlage:Erweiterte_Navigationsleiste
+      11.24%   56.351      2 Vorlage:Wikidata-Registrierung
+      11.22%   56.247      1 Vorlage:Commonscat
+      5.21%   26.120      2 Vorlage:FormatDate
+      4.98%   24.977      1 Vorlage:Infobox_Dateiformat
+      4.32%   21.652      1 Vorlage:NavFrame
+      --&gt;
+
+      &lt;!-- Saved in parser cache with key dewiki:stable-pcache:idhash:5730-0!canonical and timestamp 20190701160511 and revision id 190034957
+      --&gt;
+      &lt;/div&gt;&lt;noscript&gt;&lt;img src="//de.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;" /&gt;&lt;/noscript&gt;&lt;/div&gt;
+
+      &lt;div class="printfooter"&gt;Abgerufen von „&lt;a dir="ltr" href="https://de.wikipedia.org/w/index.php?title=Extensible_Markup_Language&amp;oldid=190034957"&gt;https://de.wikipedia.org/w/index.php?title=Extensible_Markup_Language&amp;oldid=190034957&lt;/a&gt;“&lt;/div&gt;
+
+      &lt;div id="catlinks" class="catlinks" data-mw="interface"&gt;&lt;div id="mw-normal-catlinks" class="mw-normal-catlinks"&gt;&lt;a href="/wiki/Wikipedia:Kategorien" title="Wikipedia:Kategorien"&gt;Kategorien&lt;/a&gt;: &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/Kategorie:XML" title="Kategorie:XML"&gt;XML&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/wiki/Kategorie:Standard_f%C3%BCr_Elektronischen_Datenaustausch" title="Kategorie:Standard für Elektronischen Datenaustausch"&gt;Standard für El [...]
+      &lt;div class="visualClear"&gt;&lt;/div&gt;
+
+      &lt;/div&gt;
+      &lt;/div&gt;
+
+
+      &lt;div id="mw-navigation"&gt;
+      &lt;h2&gt;Navigationsmenü&lt;/h2&gt;
+      &lt;div id="mw-head"&gt;
+      &lt;div id="p-personal" role="navigation" aria-labelledby="p-personal-label"&gt;
+      &lt;h3 id="p-personal-label"&gt;Meine Werkzeuge&lt;/h3&gt;
+      &lt;ul&gt;
+      &lt;li id="pt-anonuserpage"&gt;Nicht angemeldet&lt;/li&gt;&lt;li id="pt-anontalk"&gt;&lt;a href="/wiki/Spezial:Meine_Diskussionsseite" title="Diskussion über Änderungen von dieser IP-Adresse [n]" accesskey="n"&gt;Diskussionsseite&lt;/a&gt;&lt;/li&gt;&lt;li id="pt-anoncontribs"&gt;&lt;a href="/wiki/Spezial:Meine_Beitr%C3%A4ge" title="Eine Liste der Bearbeitungen, die von dieser IP-Adresse gemacht wurden [y]" accesskey="y"&gt;Beiträge&lt;/a&gt;&lt;/li&gt;&lt;li id="pt-createaccount"& [...]
+      &lt;/div&gt;
+      &lt;div id="left-navigation"&gt;
+      &lt;div id="p-namespaces" role="navigation" class="vectorTabs" aria-labelledby="p-namespaces-label"&gt;
+      &lt;h3 id="p-namespaces-label"&gt;Namensräume&lt;/h3&gt;
+      &lt;ul&gt;
+      &lt;li id="ca-nstab-main" class="selected"&gt;&lt;span&gt;&lt;a href="/wiki/Extensible_Markup_Language" title="Seiteninhalt anzeigen [c]" accesskey="c"&gt;Artikel&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li id="ca-talk"&gt;&lt;span&gt;&lt;a href="/wiki/Diskussion:Extensible_Markup_Language" rel="discussion" title="Diskussion zum Seiteninhalt [t]" accesskey="t"&gt;Diskussion&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;						&lt;/ul&gt;
+      &lt;/div&gt;
+      &lt;div id="p-variants" role="navigation" class="vectorMenu emptyPortlet" aria-labelledby="p-variants-label"&gt;
+      &lt;input type="checkbox" class="vectorMenuCheckbox" aria-labelledby="p-variants-label" /&gt;
+      &lt;h3 id="p-variants-label"&gt;
+      &lt;span&gt;Varianten&lt;/span&gt;
+      &lt;/h3&gt;
+      &lt;ul class="menu"&gt;
+      &lt;/ul&gt;
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;div id="right-navigation"&gt;
+      &lt;div id="p-views" role="navigation" class="vectorTabs" aria-labelledby="p-views-label"&gt;
+      &lt;h3 id="p-views-label"&gt;Ansichten&lt;/h3&gt;
+      &lt;ul&gt;
+      &lt;li id="ca-view" class="collapsible selected"&gt;&lt;span&gt;&lt;a href="/wiki/Extensible_Markup_Language"&gt;Lesen&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li id="ca-ve-edit" class="collapsible"&gt;&lt;span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit" title="Diese Seite mit dem VisualEditor bearbeiten [v]" accesskey="v"&gt;Bearbeiten&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li id="ca-edit" class="collapsible"&gt;&lt;span&gt;&lt;a href="/w/index.php?ti [...]
+      &lt;/div&gt;
+      &lt;div id="p-cactions" role="navigation" class="vectorMenu emptyPortlet" aria-labelledby="p-cactions-label"&gt;
+      &lt;input type="checkbox" class="vectorMenuCheckbox" aria-labelledby="p-cactions-label" /&gt;
+      &lt;h3 id="p-cactions-label"&gt;&lt;span&gt;Mehr&lt;/span&gt;&lt;/h3&gt;
+      &lt;ul class="menu"&gt;
+      &lt;/ul&gt;
+      &lt;/div&gt;
+      &lt;div id="p-search" role="search"&gt;
+      &lt;h3&gt;
+      &lt;label for="searchInput"&gt;Suche&lt;/label&gt;
+      &lt;/h3&gt;
+      &lt;form action="/w/index.php" id="searchform"&gt;
+      &lt;div id="simpleSearch"&gt;
+      &lt;input type="search" name="search" placeholder="Wikipedia durchsuchen" title="Durchsuche die Wikipedia [f]" accesskey="f" id="searchInput"/&gt;&lt;input type="hidden" value="Spezial:Suche" name="title"/&gt;&lt;input type="submit" name="fulltext" value="Suchen" title="Suche nach Seiten, die diesen Text enthalten" id="mw-searchButton" class="searchButton mw-fallbackSearchButton"/&gt;&lt;input type="submit" name="go" value="Artikel" title="Gehe direkt zu der Seite mit genau diesem  [...]
+      &lt;/form&gt;
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;div id="mw-panel"&gt;
+      &lt;div id="p-logo" role="banner"&gt;&lt;a class="mw-wiki-logo" href="/wiki/Wikipedia:Hauptseite" title="Hauptseite"&gt;&lt;/a&gt;&lt;/div&gt;
+      &lt;div class="portal" role="navigation" id="p-navigation" aria-labelledby="p-navigation-label"&gt;
+      &lt;h3 id="p-navigation-label"&gt;Navigation&lt;/h3&gt;
+      &lt;div class="body"&gt;
+      &lt;ul&gt;
+      &lt;li id="n-mainpage-description"&gt;&lt;a href="/wiki/Wikipedia:Hauptseite" title="Hauptseite besuchen [z]" accesskey="z"&gt;Hauptseite&lt;/a&gt;&lt;/li&gt;&lt;li id="n-topics"&gt;&lt;a href="/wiki/Portal:Wikipedia_nach_Themen"&gt;Themenportale&lt;/a&gt;&lt;/li&gt;&lt;li id="n-randompage"&gt;&lt;a href="/wiki/Spezial:Zuf%C3%A4llige_Seite" title="Zufällige Seite aufrufen [x]" accesskey="x"&gt;Zufälliger Artikel&lt;/a&gt;&lt;/li&gt;				&lt;/ul&gt;
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;div class="portal" role="navigation" id="p-Mitmachen" aria-labelledby="p-Mitmachen-label"&gt;
+      &lt;h3 id="p-Mitmachen-label"&gt;Mitmachen&lt;/h3&gt;
+      &lt;div class="body"&gt;
+      &lt;ul&gt;
+      &lt;li id="n-Artikel-verbessern"&gt;&lt;a href="/wiki/Wikipedia:Beteiligen"&gt;Artikel verbessern&lt;/a&gt;&lt;/li&gt;&lt;li id="n-Neuerartikel"&gt;&lt;a href="/wiki/Hilfe:Neuen_Artikel_anlegen"&gt;Neuen Artikel anlegen&lt;/a&gt;&lt;/li&gt;&lt;li id="n-portal"&gt;&lt;a href="/wiki/Wikipedia:Autorenportal" title="Info-Zentrum über Beteiligungsmöglichkeiten"&gt;Autorenportal&lt;/a&gt;&lt;/li&gt;&lt;li id="n-help"&gt;&lt;a href="/wiki/Hilfe:%C3%9Cbersicht" title="Hilfeseite anzeigen"& [...]
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;div class="portal" role="navigation" id="p-tb" aria-labelledby="p-tb-label"&gt;
+      &lt;h3 id="p-tb-label"&gt;Werkzeuge&lt;/h3&gt;
+      &lt;div class="body"&gt;
+      &lt;ul&gt;
+      &lt;li id="t-whatlinkshere"&gt;&lt;a href="/wiki/Spezial:Linkliste/Extensible_Markup_Language" title="Liste aller Seiten, die hierher verlinken [j]" accesskey="j"&gt;Links auf diese Seite&lt;/a&gt;&lt;/li&gt;&lt;li id="t-recentchangeslinked"&gt;&lt;a href="/wiki/Spezial:%C3%84nderungen_an_verlinkten_Seiten/Extensible_Markup_Language" rel="nofollow" title="Letzte Änderungen an Seiten, die von hier verlinkt sind [k]" accesskey="k"&gt;Änderungen an verlinkten Seiten&lt;/a&gt;&lt;/li&g [...]
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;div class="portal" role="navigation" id="p-wikibase-otherprojects" aria-labelledby="p-wikibase-otherprojects-label"&gt;
+      &lt;h3 id="p-wikibase-otherprojects-label"&gt;In anderen Projekten&lt;/h3&gt;
+      &lt;div class="body"&gt;
+      &lt;ul&gt;
+      &lt;li class="wb-otherproject-link wb-otherproject-commons"&gt;&lt;a href="https://commons.wikimedia.org/wiki/Category:XML" hreflang="en"&gt;Commons&lt;/a&gt;&lt;/li&gt;&lt;li class="wb-otherproject-link wb-otherproject-wikibooks"&gt;&lt;a href="https://de.wikibooks.org/wiki/Websiteentwicklung:_XML" hreflang="de"&gt;Wikibooks&lt;/a&gt;&lt;/li&gt;				&lt;/ul&gt;
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;div class="portal" role="navigation" id="p-coll-print_export" aria-labelledby="p-coll-print_export-label"&gt;
+      &lt;h3 id="p-coll-print_export-label"&gt;Drucken/­exportieren&lt;/h3&gt;
+      &lt;div class="body"&gt;
+      &lt;ul&gt;
+      &lt;li id="coll-create_a_book"&gt;&lt;a href="/w/index.php?title=Spezial:Buch&amp;bookcmd=book_creator&amp;referer=Extensible+Markup+Language"&gt;Buch erstellen&lt;/a&gt;&lt;/li&gt;&lt;li id="coll-download-as-rl"&gt;&lt;a href="/w/index.php?title=Spezial:ElectronPdf&amp;page=Extensible+Markup+Language&amp;action=show-download-screen"&gt;Als PDF herunterladen&lt;/a&gt;&lt;/li&gt;&lt;li id="t-print"&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;printable=yes" title [...]
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;div class="portal" role="navigation" id="p-lang" aria-labelledby="p-lang-label"&gt;
+      &lt;h3 id="p-lang-label"&gt;In anderen Sprachen&lt;/h3&gt;
+      &lt;div class="body"&gt;
+      &lt;ul&gt;
+      &lt;li class="interlanguage-link interwiki-af"&gt;&lt;a href="https://af.wikipedia.org/wiki/XML" title="XML – Afrikaans" lang="af" hreflang="af" class="interlanguage-link-target"&gt;Afrikaans&lt;/a&gt;&lt;/li&gt;&lt;li class="interlanguage-link interwiki-ar"&gt;&lt;a href="https://ar.wikipedia.org/wiki/%D9%84%D8%BA%D8%A9_%D8%A7%D9%84%D8%AA%D8%B1%D9%85%D9%8A%D8%B2_%D8%A7%D9%84%D9%82%D8%A7%D8%A8%D9%84%D8%A9_%D9%84%D9%84%D8%A7%D9%85%D8%AA%D8%AF%D8%A7%D8%AF" title="لغة الترميز القابلة  [...]
+      &lt;div class="after-portlet after-portlet-lang"&gt;&lt;span class="wb-langlinks-edit wb-langlinks-link"&gt;&lt;a href="https://www.wikidata.org/wiki/Special:EntityPage/Q2115#sitelinks-wikipedia" title="Links auf Artikel in anderen Sprachen bearbeiten" class="wbc-editpage"&gt;Links bearbeiten&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;			&lt;/div&gt;
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;div id="footer" role="contentinfo"&gt;
+      &lt;ul id="footer-info"&gt;
+      &lt;li id="footer-info-lastmod"&gt; Diese Seite wurde zuletzt am 1. Juli 2019 um 18:04 Uhr bearbeitet.&lt;/li&gt;
+      &lt;li id="footer-info-copyright"&gt;&lt;div id="footer-info-copyright-stats" class="noprint"&gt;&lt;a class="external" href="https://tools.wmflabs.org/pageviews?pages=Extensible_Markup_Language&amp;project=de.wikipedia.org" rel="nofollow"&gt;Abrufstatistik&lt;/a&gt; · &lt;a class="external" href=" https://xtools.wmflabs.org/articleinfo-authorship/de.wikipedia.org/Extensible_Markup_Language?uselang=de" rel="nofollow"&gt;Autoren&lt;/a&gt; &lt;/div&gt;&lt;div id="footer-info-copyrigh [...]
+      Der Text ist unter der Lizenz &lt;a class="internal" href="https://de.wikipedia.org/wiki/Wikipedia:Lizenzbestimmungen_Commons_Attribution-ShareAlike_3.0_Unported"&gt;„Creative Commons Attribution/Share Alike“&lt;/a&gt; verfügbar; Informationen zu den Urhebern und zum Lizenzstatus eingebundener Mediendateien (etwa Bilder oder Videos) können im Regelfall durch Anklicken dieser abgerufen werden. Möglicherweise unterliegen die Inhalte jeweils zusätzlichen Bedingungen. Durch die Nutzung [...]
+      Wikipedia® ist eine eingetragene Marke der Wikimedia Foundation Inc.&lt;/div&gt;&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;ul id="footer-places"&gt;
+      &lt;li id="footer-places-privacy"&gt;&lt;a href="https://meta.wikimedia.org/wiki/Privacy_policy/de" class="extiw" title="m:Privacy policy/de"&gt;Datenschutz&lt;/a&gt;&lt;/li&gt;
+      &lt;li id="footer-places-about"&gt;&lt;a href="/wiki/Wikipedia:%C3%9Cber_Wikipedia" title="Wikipedia:Über Wikipedia"&gt;Über Wikipedia&lt;/a&gt;&lt;/li&gt;
+      &lt;li id="footer-places-disclaimer"&gt;&lt;a href="/wiki/Wikipedia:Impressum" title="Wikipedia:Impressum"&gt;Impressum&lt;/a&gt;&lt;/li&gt;
+      &lt;li id="footer-places-developers"&gt;&lt;a href="https://www.mediawiki.org/wiki/Special:MyLanguage/How_to_contribute"&gt;Entwickler&lt;/a&gt;&lt;/li&gt;
+      &lt;li id="footer-places-cookiestatement"&gt;&lt;a href="https://foundation.wikimedia.org/wiki/Cookie_statement"&gt;Stellungnahme zu Cookies&lt;/a&gt;&lt;/li&gt;
+      &lt;li id="footer-places-mobileview"&gt;&lt;a href="//de.m.wikipedia.org/w/index.php?title=Extensible_Markup_Language&amp;mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle"&gt;Mobile Ansicht&lt;/a&gt;&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;ul id="footer-icons" class="noprint"&gt;
+      &lt;li id="footer-copyrightico"&gt;
+      &lt;a href="https://wikimediafoundation.org/"&gt;&lt;img src="/static/images/wikimedia-button.png" srcset="/static/images/wikimedia-button-1.5x.png 1.5x, /static/images/wikimedia-button-2x.png 2x" width="88" height="31" alt="Wikimedia Foundation"/&gt;&lt;/a&gt;					&lt;/li&gt;
+      &lt;li id="footer-poweredbyico"&gt;
+      &lt;a href="https://www.mediawiki.org/"&gt;&lt;img src="/static/images/poweredby_mediawiki_88x31.png" alt="Powered by MediaWiki" srcset="/static/images/poweredby_mediawiki_132x47.png 1.5x, /static/images/poweredby_mediawiki_176x62.png 2x" width="88" height="31"/&gt;&lt;/a&gt;					&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;div style="clear: both;"&gt;&lt;/div&gt;
+      &lt;/div&gt;
+
+
+      &lt;script&gt;(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgPageParseReport":{"limitreport":{"cputime":"0.468","walltime":"0.611","ppvisitednodes":{"value":3333,"limit":1000000},"ppgeneratednodes":{"value":0,"limit":1500000},"postexpandincludesize":{"value":52620,"limit":2097152},"templateargumentsize":{"value":17707,"limit":2097152},"expansiondepth":{"value":14,"limit":40},"expensivefunctioncount":{"value":3,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-siz [...]
+      &lt;script type="application/ld+json"&gt;{"@context":"https:\/\/schema.org","@type":"Article","name":"Extensible Markup Language","url":"https:\/\/de.wikipedia.org\/wiki\/Extensible_Markup_Language","sameAs":"http:\/\/www.wikidata.org\/entity\/Q2115","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q2115","author":{"@type":"Organization","name":"Autoren der Wikimedia-Projekte"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","ur [...]
+      &lt;script&gt;(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgBackendResponseTime":161,"wgHostname":"mw1246"});});&lt;/script&gt;
+      &lt;/body&gt;
+      &lt;/html&gt;
+   </object>
+</object>
diff --git a/components/camel-xj/src/test/resources/json2xml/test2.json b/components/camel-xj/src/test/resources/json2xml/test2.json
new file mode 100644
index 0000000..3931054
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test2.json
@@ -0,0 +1,26 @@
+[
+  {
+    "id": "1",
+    "type": "2",
+    "displayName": "3",
+    "firstname": "4",
+    "lastname": "5",
+    "role": "6",
+    "email": "7",
+    "company": "8",
+    "department": "9",
+    "division": "10"
+  },
+  {
+    "id": "11",
+    "type": "12",
+    "displayName": "13",
+    "firstname": "14",
+    "lastname": "15",
+    "role": "16",
+    "email": "17",
+    "company": "18",
+    "department": "19",
+    "division": "20"
+  }
+]
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/json2xml/test2.xml b/components/camel-xj/src/test/resources/json2xml/test2.xml
new file mode 100644
index 0000000..0165f14
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test2.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj" xj:type="array">
+   <object xj:type="object">
+      <object xj:name="id" xj:type="string">1</object>
+      <object xj:name="type" xj:type="string">2</object>
+      <object xj:name="displayName" xj:type="string">3</object>
+      <object xj:name="firstname" xj:type="string">4</object>
+      <object xj:name="lastname" xj:type="string">5</object>
+      <object xj:name="role" xj:type="string">6</object>
+      <object xj:name="email" xj:type="string">7</object>
+      <object xj:name="company" xj:type="string">8</object>
+      <object xj:name="department" xj:type="string">9</object>
+      <object xj:name="division" xj:type="string">10</object>
+   </object>
+   <object xj:type="object">
+      <object xj:name="id" xj:type="string">11</object>
+      <object xj:name="type" xj:type="string">12</object>
+      <object xj:name="displayName" xj:type="string">13</object>
+      <object xj:name="firstname" xj:type="string">14</object>
+      <object xj:name="lastname" xj:type="string">15</object>
+      <object xj:name="role" xj:type="string">16</object>
+      <object xj:name="email" xj:type="string">17</object>
+      <object xj:name="company" xj:type="string">18</object>
+      <object xj:name="department" xj:type="string">19</object>
+      <object xj:name="division" xj:type="string">20</object>
+   </object>
+</object>
diff --git a/components/camel-xj/src/test/resources/json2xml/test3.json b/components/camel-xj/src/test/resources/json2xml/test3.json
new file mode 100644
index 0000000..b1b8e86
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test3.json
@@ -0,0 +1,26 @@
+{
+  "a": [
+    "1",
+    "2",
+    "3",
+    "4",
+    "5",
+    "6",
+    "7",
+    "8",
+    "9",
+    "10"
+  ],
+  "object": [
+    "11",
+    "12",
+    "13",
+    "14",
+    "15",
+    "16",
+    "17",
+    "18",
+    "19",
+    "20"
+  ]
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/json2xml/test3.xml b/components/camel-xj/src/test/resources/json2xml/test3.xml
new file mode 100644
index 0000000..252be62
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test3.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj" xj:type="object">
+   <object xj:name="a" xj:type="array">
+      <object xj:type="string">1</object>
+      <object xj:type="string">2</object>
+      <object xj:type="string">3</object>
+      <object xj:type="string">4</object>
+      <object xj:type="string">5</object>
+      <object xj:type="string">6</object>
+      <object xj:type="string">7</object>
+      <object xj:type="string">8</object>
+      <object xj:type="string">9</object>
+      <object xj:type="string">10</object>
+   </object>
+   <object xj:name="object" xj:type="array">
+      <object xj:type="string">11</object>
+      <object xj:type="string">12</object>
+      <object xj:type="string">13</object>
+      <object xj:type="string">14</object>
+      <object xj:type="string">15</object>
+      <object xj:type="string">16</object>
+      <object xj:type="string">17</object>
+      <object xj:type="string">18</object>
+      <object xj:type="string">19</object>
+      <object xj:type="string">20</object>
+   </object>
+</object>
diff --git a/components/camel-xj/src/test/resources/json2xml/test4.json b/components/camel-xj/src/test/resources/json2xml/test4.json
new file mode 100644
index 0000000..796fe9a
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test4.json
@@ -0,0 +1,26 @@
+{
+  "a": [
+    "1",
+    "2",
+    "3",
+    "4",
+    "5",
+    "6",
+    "7",
+    "8",
+    "9",
+    "10"
+  ],
+  "b": [
+    "11",
+    "12",
+    "13",
+    "14",
+    "15",
+    "16",
+    "17",
+    "18",
+    "19",
+    "20"
+  ]
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/json2xml/test4.xml b/components/camel-xj/src/test/resources/json2xml/test4.xml
new file mode 100644
index 0000000..73a070a
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test4.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj" xj:type="object">
+   <object xj:name="a" xj:type="array">
+      <object xj:type="string">1</object>
+      <object xj:type="string">2</object>
+      <object xj:type="string">3</object>
+      <object xj:type="string">4</object>
+      <object xj:type="string">5</object>
+      <object xj:type="string">6</object>
+      <object xj:type="string">7</object>
+      <object xj:type="string">8</object>
+      <object xj:type="string">9</object>
+      <object xj:type="string">10</object>
+   </object>
+   <object xj:name="b" xj:type="array">
+      <object xj:type="string">11</object>
+      <object xj:type="string">12</object>
+      <object xj:type="string">13</object>
+      <object xj:type="string">14</object>
+      <object xj:type="string">15</object>
+      <object xj:type="string">16</object>
+      <object xj:type="string">17</object>
+      <object xj:type="string">18</object>
+      <object xj:type="string">19</object>
+      <object xj:type="string">20</object>
+   </object>
+</object>
diff --git a/components/camel-xj/src/test/resources/json2xml/test5.json b/components/camel-xj/src/test/resources/json2xml/test5.json
new file mode 100644
index 0000000..bfc6b4f
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test5.json
@@ -0,0 +1,26 @@
+[
+  [
+    "1",
+    "2",
+    "3",
+    "4",
+    "5",
+    "6",
+    "7",
+    "8",
+    "9",
+    "10"
+  ],
+  [
+    "11",
+    "12",
+    "13",
+    "14",
+    "15",
+    "16",
+    "17",
+    "18",
+    "19",
+    "20"
+  ]
+]
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/json2xml/test5.xml b/components/camel-xj/src/test/resources/json2xml/test5.xml
new file mode 100644
index 0000000..b1c51da
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test5.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj" xj:type="array">
+   <object xj:type="array">
+      <object xj:type="string">1</object>
+      <object xj:type="string">2</object>
+      <object xj:type="string">3</object>
+      <object xj:type="string">4</object>
+      <object xj:type="string">5</object>
+      <object xj:type="string">6</object>
+      <object xj:type="string">7</object>
+      <object xj:type="string">8</object>
+      <object xj:type="string">9</object>
+      <object xj:type="string">10</object>
+   </object>
+   <object xj:type="array">
+      <object xj:type="string">11</object>
+      <object xj:type="string">12</object>
+      <object xj:type="string">13</object>
+      <object xj:type="string">14</object>
+      <object xj:type="string">15</object>
+      <object xj:type="string">16</object>
+      <object xj:type="string">17</object>
+      <object xj:type="string">18</object>
+      <object xj:type="string">19</object>
+      <object xj:type="string">20</object>
+   </object>
+</object>
diff --git a/components/camel-xj/src/test/resources/json2xml/test6.json b/components/camel-xj/src/test/resources/json2xml/test6.json
new file mode 100644
index 0000000..bfc6b4f
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test6.json
@@ -0,0 +1,26 @@
+[
+  [
+    "1",
+    "2",
+    "3",
+    "4",
+    "5",
+    "6",
+    "7",
+    "8",
+    "9",
+    "10"
+  ],
+  [
+    "11",
+    "12",
+    "13",
+    "14",
+    "15",
+    "16",
+    "17",
+    "18",
+    "19",
+    "20"
+  ]
+]
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/json2xml/test6.xml b/components/camel-xj/src/test/resources/json2xml/test6.xml
new file mode 100644
index 0000000..b1c51da
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test6.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj" xj:type="array">
+   <object xj:type="array">
+      <object xj:type="string">1</object>
+      <object xj:type="string">2</object>
+      <object xj:type="string">3</object>
+      <object xj:type="string">4</object>
+      <object xj:type="string">5</object>
+      <object xj:type="string">6</object>
+      <object xj:type="string">7</object>
+      <object xj:type="string">8</object>
+      <object xj:type="string">9</object>
+      <object xj:type="string">10</object>
+   </object>
+   <object xj:type="array">
+      <object xj:type="string">11</object>
+      <object xj:type="string">12</object>
+      <object xj:type="string">13</object>
+      <object xj:type="string">14</object>
+      <object xj:type="string">15</object>
+      <object xj:type="string">16</object>
+      <object xj:type="string">17</object>
+      <object xj:type="string">18</object>
+      <object xj:type="string">19</object>
+      <object xj:type="string">20</object>
+   </object>
+</object>
diff --git a/components/camel-xj/src/test/resources/json2xml/test7.json b/components/camel-xj/src/test/resources/json2xml/test7.json
new file mode 100644
index 0000000..e893a46
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test7.json
@@ -0,0 +1,26 @@
+{
+  "a": {
+    "id": "1",
+    "type": "2",
+    "displayName": "3",
+    "firstname": "4",
+    "lastname": "5",
+    "role": "6",
+    "email": "7",
+    "company": "8",
+    "department": "9",
+    "division": "10"
+  },
+  "b": {
+    "id": "11",
+    "type": "12",
+    "displayName": "13",
+    "firstname": "14",
+    "lastname": "15",
+    "role": "16",
+    "email": "17",
+    "company": "18",
+    "department": "19",
+    "division": "20"
+  }
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/json2xml/test7.xml b/components/camel-xj/src/test/resources/json2xml/test7.xml
new file mode 100644
index 0000000..3dc4db9
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test7.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj" xj:type="object">
+   <object xj:name="a" xj:type="object">
+      <object xj:name="id" xj:type="string">1</object>
+      <object xj:name="type" xj:type="string">2</object>
+      <object xj:name="displayName" xj:type="string">3</object>
+      <object xj:name="firstname" xj:type="string">4</object>
+      <object xj:name="lastname" xj:type="string">5</object>
+      <object xj:name="role" xj:type="string">6</object>
+      <object xj:name="email" xj:type="string">7</object>
+      <object xj:name="company" xj:type="string">8</object>
+      <object xj:name="department" xj:type="string">9</object>
+      <object xj:name="division" xj:type="string">10</object>
+   </object>
+   <object xj:name="b" xj:type="object">
+      <object xj:name="id" xj:type="string">11</object>
+      <object xj:name="type" xj:type="string">12</object>
+      <object xj:name="displayName" xj:type="string">13</object>
+      <object xj:name="firstname" xj:type="string">14</object>
+      <object xj:name="lastname" xj:type="string">15</object>
+      <object xj:name="role" xj:type="string">16</object>
+      <object xj:name="email" xj:type="string">17</object>
+      <object xj:name="company" xj:type="string">18</object>
+      <object xj:name="department" xj:type="string">19</object>
+      <object xj:name="division" xj:type="string">20</object>
+   </object>
+</object>
diff --git a/components/camel-xj/src/test/resources/json2xml/test8.json b/components/camel-xj/src/test/resources/json2xml/test8.json
new file mode 100644
index 0000000..def0178
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test8.json
@@ -0,0 +1,33 @@
+{
+  "query": {
+    "fi&lter": {
+      "ä<type": "&",
+      "conditions": [
+        {
+          "filter": {
+            "type": "and",
+            "conditions": [
+              {
+                "\nop": "contains",
+                "field": "id",
+                "value": "\trtg1"
+              },
+              {
+                "filter": {
+                  "type": "not",
+                  "conditions": [
+                    {
+                      "op": "eq",
+                      "field": "id",
+                      "value": "ext-rtg1"
+                    }
+                  ]
+                }
+              }
+            ]
+          }
+        }
+      ]
+    }
+  }
+}
diff --git a/components/camel-xj/src/test/resources/json2xml/test8.xml b/components/camel-xj/src/test/resources/json2xml/test8.xml
new file mode 100644
index 0000000..4bf7cc1
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test8.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj" xj:type="object">
+   <object xj:name="query" xj:type="object">
+      <object xj:name="fi&amp;lter" xj:type="object">
+         <object xj:name="ä&lt;type" xj:type="string">&amp;</object>
+         <object xj:name="conditions" xj:type="array">
+            <object xj:type="object">
+               <object xj:name="filter" xj:type="object">
+                  <object xj:name="type" xj:type="string">and</object>
+                  <object xj:name="conditions" xj:type="array">
+                     <object xj:type="object">
+                        <object xj:name="&#10;op" xj:type="string">contains</object>
+                        <object xj:name="field" xj:type="string">id</object>
+                        <object xj:name="value" xj:type="string">	rtg1</object>
+                     </object>
+                     <object xj:type="object">
+                        <object xj:name="filter" xj:type="object">
+                           <object xj:name="type" xj:type="string">not</object>
+                           <object xj:name="conditions" xj:type="array">
+                              <object xj:type="object">
+                                 <object xj:name="op" xj:type="string">eq</object>
+                                 <object xj:name="field" xj:type="string">id</object>
+                                 <object xj:name="value" xj:type="string">ext-rtg1</object>
+                              </object>
+                           </object>
+                        </object>
+                     </object>
+                  </object>
+               </object>
+            </object>
+         </object>
+      </object>
+   </object>
+</object>
diff --git a/components/camel-xj/src/test/resources/json2xml/test9.json b/components/camel-xj/src/test/resources/json2xml/test9.json
new file mode 100644
index 0000000..4c7c959
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test9.json
@@ -0,0 +1,260 @@
+{
+  "": {
+    "\u0000": "\u0000",
+    "\u0001": "\u0001",
+    "\u0002": "\u0002",
+    "\u0003": "\u0003",
+    "\u0004": "\u0004",
+    "\u0005": "\u0005",
+    "\u0006": "\u0006",
+    "\u0007": "\u0007",
+    "\b": "\b",
+    "\t": "\t",
+    "\n": "\n",
+    "\u000B": "\u000B",
+    "\f": "\f",
+    "\r": "\r",
+    "\u000E": "\u000E",
+    "\u000F": "\u000F",
+    "\u0010": "\u0010",
+    "\u0011": "\u0011",
+    "\u0012": "\u0012",
+    "\u0013": "\u0013",
+    "\u0014": "\u0014",
+    "\u0015": "\u0015",
+    "\u0016": "\u0016",
+    "\u0017": "\u0017",
+    "\u0018": "\u0018",
+    "\u0019": "\u0019",
+    "\u001A": "\u001A",
+    "\u001B": "\u001B",
+    "\u001C": "\u001C",
+    "\u001D": "\u001D",
+    "\u001E": "\u001E",
+    "\u001F": "\u001F",
+    " ": " ",
+    "!": "!",
+    "\"": "\"",
+    "#": "#",
+    "$": "$",
+    "%": "%",
+    "&": "&",
+    "'": "'",
+    "(": "(",
+    ")": ")",
+    "*": "*",
+    "+": "+",
+    ",": ",",
+    "-": "-",
+    ".": ".",
+    "/": "/",
+    "0": "0",
+    "1": "1",
+    "2": "2",
+    "3": "3",
+    "4": "4",
+    "5": "5",
+    "6": "6",
+    "7": "7",
+    "8": "8",
+    "9": "9",
+    ":": ":",
+    ";": ";",
+    "<": "<",
+    "=": "=",
+    ">": ">",
+    "?": "?",
+    "@": "@",
+    "A": "A",
+    "B": "B",
+    "C": "C",
+    "D": "D",
+    "E": "E",
+    "F": "F",
+    "G": "G",
+    "H": "H",
+    "I": "I",
+    "J": "J",
+    "K": "K",
+    "L": "L",
+    "M": "M",
+    "N": "N",
+    "O": "O",
+    "P": "P",
+    "Q": "Q",
+    "R": "R",
+    "S": "S",
+    "T": "T",
+    "U": "U",
+    "V": "V",
+    "W": "W",
+    "X": "X",
+    "Y": "Y",
+    "Z": "Z",
+    "[": "[",
+    "\\": "\\",
+    "]": "]",
+    "^": "^",
+    "_": "_",
+    "`": "`",
+    "a": "a",
+    "b": "b",
+    "c": "c",
+    "d": "d",
+    "e": "e",
+    "f": "f",
+    "g": "g",
+    "h": "h",
+    "i": "i",
+    "j": "j",
+    "k": "k",
+    "l": "l",
+    "m": "m",
+    "n": "n",
+    "o": "o",
+    "p": "p",
+    "q": "q",
+    "r": "r",
+    "s": "s",
+    "t": "t",
+    "u": "u",
+    "v": "v",
+    "w": "w",
+    "x": "x",
+    "y": "y",
+    "z": "z",
+    "{": "{",
+    "|": "|",
+    "}": "}",
+    "~": "~",
+    "": "",
+    "€": "€",
+    "": "",
+    "‚": "‚",
+    "ƒ": "ƒ",
+    "„": "„",
+    "…": "…",
+    "†": "†",
+    "‡": "‡",
+    "ˆ": "ˆ",
+    "‰": "‰",
+    "Š": "Š",
+    "‹": "‹",
+    "Œ": "Œ",
+    "": "",
+    "Ž": "Ž",
+    "": "",
+    "": "",
+    "‘": "‘",
+    "’": "’",
+    "“": "“",
+    "”": "”",
+    "•": "•",
+    "–": "–",
+    "—": "—",
+    "˜": "˜",
+    "™": "™",
+    "š": "š",
+    "›": "›",
+    "œ": "œ",
+    "": "",
+    "ž": "ž",
+    "Ÿ": "Ÿ",
+    " ": " ",
+    "¡": "¡",
+    "¢": "¢",
+    "£": "£",
+    "¤": "¤",
+    "¥": "¥",
+    "¦": "¦",
+    "§": "§",
+    "¨": "¨",
+    "©": "©",
+    "ª": "ª",
+    "«": "«",
+    "¬": "¬",
+    "­": "­",
+    "®": "®",
+    "¯": "¯",
+    "°": "°",
+    "±": "±",
+    "²": "²",
+    "³": "³",
+    "´": "´",
+    "µ": "µ",
+    "¶": "¶",
+    "·": "·",
+    "¸": "¸",
+    "¹": "¹",
+    "º": "º",
+    "»": "»",
+    "¼": "¼",
+    "½": "½",
+    "¾": "¾",
+    "¿": "¿",
+    "À": "À",
+    "Á": "Á",
+    "Â": "Â",
+    "Ã": "Ã",
+    "Ä": "Ä",
+    "Å": "Å",
+    "Æ": "Æ",
+    "Ç": "Ç",
+    "È": "È",
+    "É": "É",
+    "Ê": "Ê",
+    "Ë": "Ë",
+    "Ì": "Ì",
+    "Í": "Í",
+    "Î": "Î",
+    "Ï": "Ï",
+    "Ð": "Ð",
+    "Ñ": "Ñ",
+    "Ò": "Ò",
+    "Ó": "Ó",
+    "Ô": "Ô",
+    "Õ": "Õ",
+    "Ö": "Ö",
+    "×": "×",
+    "Ø": "Ø",
+    "Ù": "Ù",
+    "Ú": "Ú",
+    "Û": "Û",
+    "Ü": "Ü",
+    "Ý": "Ý",
+    "Þ": "Þ",
+    "ß": "ß",
+    "à": "à",
+    "á": "á",
+    "â": "â",
+    "ã": "ã",
+    "ä": "ä",
+    "å": "å",
+    "æ": "æ",
+    "ç": "ç",
+    "è": "è",
+    "é": "é",
+    "ê": "ê",
+    "ë": "ë",
+    "ì": "ì",
+    "í": "í",
+    "î": "î",
+    "ï": "ï",
+    "ð": "ð",
+    "ñ": "ñ",
+    "ò": "ò",
+    "ó": "ó",
+    "ô": "ô",
+    "õ": "õ",
+    "ö": "ö",
+    "÷": "÷",
+    "ø": "ø",
+    "ù": "ù",
+    "ú": "ú",
+    "û": "û",
+    "ü": "ü",
+    "ý": "ý",
+    "þ": "þ",
+    "ÿ": "ÿ"
+  }
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/json2xml/test9.xml b/components/camel-xj/src/test/resources/json2xml/test9.xml
new file mode 100644
index 0000000..30cc649
--- /dev/null
+++ b/components/camel-xj/src/test/resources/json2xml/test9.xml
@@ -0,0 +1,262 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj" xj:type="object">
+   <object xj:type="object">
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="&#9;" xj:type="string">	</object>
+      <object xj:name="&#10;" xj:type="string">
+</object>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="&#13;" xj:type="string">&#13;</object>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name="" xj:type="string"/>
+      <object xj:name=" " xj:type="string"> </object>
+      <object xj:name="!" xj:type="string">!</object>
+      <object xj:name="&quot;" xj:type="string">"</object>
+      <object xj:name="#" xj:type="string">#</object>
+      <object xj:name="$" xj:type="string">$</object>
+      <object xj:name="%" xj:type="string">%</object>
+      <object xj:name="&amp;" xj:type="string">&amp;</object>
+      <object xj:name="'" xj:type="string">'</object>
+      <object xj:name="(" xj:type="string">(</object>
+      <object xj:name=")" xj:type="string">)</object>
+      <object xj:name="*" xj:type="string">*</object>
+      <object xj:name="+" xj:type="string">+</object>
+      <object xj:name="," xj:type="string">,</object>
+      <object xj:name="-" xj:type="string">-</object>
+      <object xj:name="." xj:type="string">.</object>
+      <object xj:name="/" xj:type="string">/</object>
+      <object xj:name="0" xj:type="string">0</object>
+      <object xj:name="1" xj:type="string">1</object>
+      <object xj:name="2" xj:type="string">2</object>
+      <object xj:name="3" xj:type="string">3</object>
+      <object xj:name="4" xj:type="string">4</object>
+      <object xj:name="5" xj:type="string">5</object>
+      <object xj:name="6" xj:type="string">6</object>
+      <object xj:name="7" xj:type="string">7</object>
+      <object xj:name="8" xj:type="string">8</object>
+      <object xj:name="9" xj:type="string">9</object>
+      <object xj:name=":" xj:type="string">:</object>
+      <object xj:name=";" xj:type="string">;</object>
+      <object xj:name="&lt;" xj:type="string">&lt;</object>
+      <object xj:name="=" xj:type="string">=</object>
+      <object xj:name="&gt;" xj:type="string">&gt;</object>
+      <object xj:name="?" xj:type="string">?</object>
+      <object xj:name="@" xj:type="string">@</object>
+      <object xj:name="A" xj:type="string">A</object>
+      <object xj:name="B" xj:type="string">B</object>
+      <object xj:name="C" xj:type="string">C</object>
+      <object xj:name="D" xj:type="string">D</object>
+      <object xj:name="E" xj:type="string">E</object>
+      <object xj:name="F" xj:type="string">F</object>
+      <object xj:name="G" xj:type="string">G</object>
+      <object xj:name="H" xj:type="string">H</object>
+      <object xj:name="I" xj:type="string">I</object>
+      <object xj:name="J" xj:type="string">J</object>
+      <object xj:name="K" xj:type="string">K</object>
+      <object xj:name="L" xj:type="string">L</object>
+      <object xj:name="M" xj:type="string">M</object>
+      <object xj:name="N" xj:type="string">N</object>
+      <object xj:name="O" xj:type="string">O</object>
+      <object xj:name="P" xj:type="string">P</object>
+      <object xj:name="Q" xj:type="string">Q</object>
+      <object xj:name="R" xj:type="string">R</object>
+      <object xj:name="S" xj:type="string">S</object>
+      <object xj:name="T" xj:type="string">T</object>
+      <object xj:name="U" xj:type="string">U</object>
+      <object xj:name="V" xj:type="string">V</object>
+      <object xj:name="W" xj:type="string">W</object>
+      <object xj:name="X" xj:type="string">X</object>
+      <object xj:name="Y" xj:type="string">Y</object>
+      <object xj:name="Z" xj:type="string">Z</object>
+      <object xj:name="[" xj:type="string">[</object>
+      <object xj:name="\" xj:type="string">\</object>
+      <object xj:name="]" xj:type="string">]</object>
+      <object xj:name="^" xj:type="string">^</object>
+      <object xj:name="_" xj:type="string">_</object>
+      <object xj:name="`" xj:type="string">`</object>
+      <object xj:name="a" xj:type="string">a</object>
+      <object xj:name="b" xj:type="string">b</object>
+      <object xj:name="c" xj:type="string">c</object>
+      <object xj:name="d" xj:type="string">d</object>
+      <object xj:name="e" xj:type="string">e</object>
+      <object xj:name="f" xj:type="string">f</object>
+      <object xj:name="g" xj:type="string">g</object>
+      <object xj:name="h" xj:type="string">h</object>
+      <object xj:name="i" xj:type="string">i</object>
+      <object xj:name="j" xj:type="string">j</object>
+      <object xj:name="k" xj:type="string">k</object>
+      <object xj:name="l" xj:type="string">l</object>
+      <object xj:name="m" xj:type="string">m</object>
+      <object xj:name="n" xj:type="string">n</object>
+      <object xj:name="o" xj:type="string">o</object>
+      <object xj:name="p" xj:type="string">p</object>
+      <object xj:name="q" xj:type="string">q</object>
+      <object xj:name="r" xj:type="string">r</object>
+      <object xj:name="s" xj:type="string">s</object>
+      <object xj:name="t" xj:type="string">t</object>
+      <object xj:name="u" xj:type="string">u</object>
+      <object xj:name="v" xj:type="string">v</object>
+      <object xj:name="w" xj:type="string">w</object>
+      <object xj:name="x" xj:type="string">x</object>
+      <object xj:name="y" xj:type="string">y</object>
+      <object xj:name="z" xj:type="string">z</object>
+      <object xj:name="{" xj:type="string">{</object>
+      <object xj:name="|" xj:type="string">|</object>
+      <object xj:name="}" xj:type="string">}</object>
+      <object xj:name="~" xj:type="string">~</object>
+      <object xj:name="" xj:type="string">&#127;</object>
+      <object xj:name="€" xj:type="string">&#128;</object>
+      <object xj:name="" xj:type="string">&#129;</object>
+      <object xj:name="‚" xj:type="string">&#130;</object>
+      <object xj:name="ƒ" xj:type="string">&#131;</object>
+      <object xj:name="„" xj:type="string">&#132;</object>
+      <object xj:name="…" xj:type="string">&#133;</object>
+      <object xj:name="†" xj:type="string">&#134;</object>
+      <object xj:name="‡" xj:type="string">&#135;</object>
+      <object xj:name="ˆ" xj:type="string">&#136;</object>
+      <object xj:name="‰" xj:type="string">&#137;</object>
+      <object xj:name="Š" xj:type="string">&#138;</object>
+      <object xj:name="‹" xj:type="string">&#139;</object>
+      <object xj:name="Œ" xj:type="string">&#140;</object>
+      <object xj:name="" xj:type="string">&#141;</object>
+      <object xj:name="Ž" xj:type="string">&#142;</object>
+      <object xj:name="" xj:type="string">&#143;</object>
+      <object xj:name="" xj:type="string">&#144;</object>
+      <object xj:name="‘" xj:type="string">&#145;</object>
+      <object xj:name="’" xj:type="string">&#146;</object>
+      <object xj:name="“" xj:type="string">&#147;</object>
+      <object xj:name="”" xj:type="string">&#148;</object>
+      <object xj:name="•" xj:type="string">&#149;</object>
+      <object xj:name="–" xj:type="string">&#150;</object>
+      <object xj:name="—" xj:type="string">&#151;</object>
+      <object xj:name="˜" xj:type="string">&#152;</object>
+      <object xj:name="™" xj:type="string">&#153;</object>
+      <object xj:name="š" xj:type="string">&#154;</object>
+      <object xj:name="›" xj:type="string">&#155;</object>
+      <object xj:name="œ" xj:type="string">&#156;</object>
+      <object xj:name="" xj:type="string">&#157;</object>
+      <object xj:name="ž" xj:type="string">&#158;</object>
+      <object xj:name="Ÿ" xj:type="string">&#159;</object>
+      <object xj:name=" " xj:type="string"> </object>
+      <object xj:name="¡" xj:type="string">¡</object>
+      <object xj:name="¢" xj:type="string">¢</object>
+      <object xj:name="£" xj:type="string">£</object>
+      <object xj:name="¤" xj:type="string">¤</object>
+      <object xj:name="¥" xj:type="string">¥</object>
+      <object xj:name="¦" xj:type="string">¦</object>
+      <object xj:name="§" xj:type="string">§</object>
+      <object xj:name="¨" xj:type="string">¨</object>
+      <object xj:name="©" xj:type="string">©</object>
+      <object xj:name="ª" xj:type="string">ª</object>
+      <object xj:name="«" xj:type="string">«</object>
+      <object xj:name="¬" xj:type="string">¬</object>
+      <object xj:name="­" xj:type="string">­</object>
+      <object xj:name="®" xj:type="string">®</object>
+      <object xj:name="¯" xj:type="string">¯</object>
+      <object xj:name="°" xj:type="string">°</object>
+      <object xj:name="±" xj:type="string">±</object>
+      <object xj:name="²" xj:type="string">²</object>
+      <object xj:name="³" xj:type="string">³</object>
+      <object xj:name="´" xj:type="string">´</object>
+      <object xj:name="µ" xj:type="string">µ</object>
+      <object xj:name="¶" xj:type="string">¶</object>
+      <object xj:name="·" xj:type="string">·</object>
+      <object xj:name="¸" xj:type="string">¸</object>
+      <object xj:name="¹" xj:type="string">¹</object>
+      <object xj:name="º" xj:type="string">º</object>
+      <object xj:name="»" xj:type="string">»</object>
+      <object xj:name="¼" xj:type="string">¼</object>
+      <object xj:name="½" xj:type="string">½</object>
+      <object xj:name="¾" xj:type="string">¾</object>
+      <object xj:name="¿" xj:type="string">¿</object>
+      <object xj:name="À" xj:type="string">À</object>
+      <object xj:name="Á" xj:type="string">Á</object>
+      <object xj:name="Â" xj:type="string">Â</object>
+      <object xj:name="Ã" xj:type="string">Ã</object>
+      <object xj:name="Ä" xj:type="string">Ä</object>
+      <object xj:name="Å" xj:type="string">Å</object>
+      <object xj:name="Æ" xj:type="string">Æ</object>
+      <object xj:name="Ç" xj:type="string">Ç</object>
+      <object xj:name="È" xj:type="string">È</object>
+      <object xj:name="É" xj:type="string">É</object>
+      <object xj:name="Ê" xj:type="string">Ê</object>
+      <object xj:name="Ë" xj:type="string">Ë</object>
+      <object xj:name="Ì" xj:type="string">Ì</object>
+      <object xj:name="Í" xj:type="string">Í</object>
+      <object xj:name="Î" xj:type="string">Î</object>
+      <object xj:name="Ï" xj:type="string">Ï</object>
+      <object xj:name="Ð" xj:type="string">Ð</object>
+      <object xj:name="Ñ" xj:type="string">Ñ</object>
+      <object xj:name="Ò" xj:type="string">Ò</object>
+      <object xj:name="Ó" xj:type="string">Ó</object>
+      <object xj:name="Ô" xj:type="string">Ô</object>
+      <object xj:name="Õ" xj:type="string">Õ</object>
+      <object xj:name="Ö" xj:type="string">Ö</object>
+      <object xj:name="×" xj:type="string">×</object>
+      <object xj:name="Ø" xj:type="string">Ø</object>
+      <object xj:name="Ù" xj:type="string">Ù</object>
+      <object xj:name="Ú" xj:type="string">Ú</object>
+      <object xj:name="Û" xj:type="string">Û</object>
+      <object xj:name="Ü" xj:type="string">Ü</object>
+      <object xj:name="Ý" xj:type="string">Ý</object>
+      <object xj:name="Þ" xj:type="string">Þ</object>
+      <object xj:name="ß" xj:type="string">ß</object>
+      <object xj:name="à" xj:type="string">à</object>
+      <object xj:name="á" xj:type="string">á</object>
+      <object xj:name="â" xj:type="string">â</object>
+      <object xj:name="ã" xj:type="string">ã</object>
+      <object xj:name="ä" xj:type="string">ä</object>
+      <object xj:name="å" xj:type="string">å</object>
+      <object xj:name="æ" xj:type="string">æ</object>
+      <object xj:name="ç" xj:type="string">ç</object>
+      <object xj:name="è" xj:type="string">è</object>
+      <object xj:name="é" xj:type="string">é</object>
+      <object xj:name="ê" xj:type="string">ê</object>
+      <object xj:name="ë" xj:type="string">ë</object>
+      <object xj:name="ì" xj:type="string">ì</object>
+      <object xj:name="í" xj:type="string">í</object>
+      <object xj:name="î" xj:type="string">î</object>
+      <object xj:name="ï" xj:type="string">ï</object>
+      <object xj:name="ð" xj:type="string">ð</object>
+      <object xj:name="ñ" xj:type="string">ñ</object>
+      <object xj:name="ò" xj:type="string">ò</object>
+      <object xj:name="ó" xj:type="string">ó</object>
+      <object xj:name="ô" xj:type="string">ô</object>
+      <object xj:name="õ" xj:type="string">õ</object>
+      <object xj:name="ö" xj:type="string">ö</object>
+      <object xj:name="÷" xj:type="string">÷</object>
+      <object xj:name="ø" xj:type="string">ø</object>
+      <object xj:name="ù" xj:type="string">ù</object>
+      <object xj:name="ú" xj:type="string">ú</object>
+      <object xj:name="û" xj:type="string">û</object>
+      <object xj:name="ü" xj:type="string">ü</object>
+      <object xj:name="ý" xj:type="string">ý</object>
+      <object xj:name="þ" xj:type="string">þ</object>
+      <object xj:name="ÿ" xj:type="string">ÿ</object>
+   </object>
+</object>
diff --git a/components/camel-xj/src/test/resources/log4j2.properties b/components/camel-xj/src/test/resources/log4j2.properties
new file mode 100644
index 0000000..b5266d5
--- /dev/null
+++ b/components/camel-xj/src/test/resources/log4j2.properties
@@ -0,0 +1,28 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+appender.file.type = File
+appender.file.name = file
+appender.file.fileName = target/camel-xj-test.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+appender.out.type = Console
+appender.out.name = out
+appender.out.layout.type = PatternLayout
+appender.out.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+rootLogger.level = INFO
+rootLogger.appenderRef.file.ref = file
diff --git a/components/camel-xj/src/test/resources/xml2json/test1.json b/components/camel-xj/src/test/resources/xml2json/test1.json
new file mode 100644
index 0000000..bfc6b4f
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test1.json
@@ -0,0 +1,26 @@
+[
+  [
+    "1",
+    "2",
+    "3",
+    "4",
+    "5",
+    "6",
+    "7",
+    "8",
+    "9",
+    "10"
+  ],
+  [
+    "11",
+    "12",
+    "13",
+    "14",
+    "15",
+    "16",
+    "17",
+    "18",
+    "19",
+    "20"
+  ]
+]
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test1.xml b/components/camel-xj/src/test/resources/xml2json/test1.xml
new file mode 100644
index 0000000..3b9892e
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test1.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj">
+   <object>
+      <object>1</object>
+      <object>2</object>
+      <object>3</object>
+      <object>4</object>
+      <object>5</object>
+      <object>6</object>
+      <object>7</object>
+      <object>8</object>
+      <object>9</object>
+      <object>10</object>
+   </object>
+   <object>
+      <object>11</object>
+      <object>12</object>
+      <object>13</object>
+      <object>14</object>
+      <object>15</object>
+      <object>16</object>
+      <object>17</object>
+      <object>18</object>
+      <object>19</object>
+      <object>20</object>
+   </object>
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test10.json b/components/camel-xj/src/test/resources/xml2json/test10.json
new file mode 100644
index 0000000..7839b61
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test10.json
@@ -0,0 +1,10 @@
+{
+  "id": 1,
+  "type": null,
+  "displayName": true,
+  "firstname": false,
+  "lastname": 1.2,
+  "role": 2.1e10,
+  "base64": "SGFsbG8K",
+  "company": "8"
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test10.xml b/components/camel-xj/src/test/resources/xml2json/test10.xml
new file mode 100644
index 0000000..4e21b5a
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test10.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj" xj:type="object">
+   <object xj:name="id" xj:type="int">1</object>
+   <object xj:name="type" xj:type="null">testnull</object>
+   <object xj:name="displayName" xj:type="boolean">true</object>
+   <object xj:name="firstname" xj:type="boolean">false</object>
+   <object xj:name="lastname" xj:type="float">1.2</object>
+   <object xj:name="role" xj:type="float">2.1e10</object>
+   <object xj:name="base64" xj:type="string">SGFsbG8K</object>
+   <object xj:name="company" xj:type="string">8</object>
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test11.json b/components/camel-xj/src/test/resources/xml2json/test11.json
new file mode 100644
index 0000000..d79cb73
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test11.json
@@ -0,0 +1,10 @@
+[
+  1,
+  null,
+  true,
+  false,
+  1.2,
+  2.1e10,
+  "SGFsbG8K",
+  "8"
+]
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test11.xml b/components/camel-xj/src/test/resources/xml2json/test11.xml
new file mode 100644
index 0000000..4f3328c
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test11.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj" xj:type="array">
+   <object xj:name="id" xj:type="int">1</object>
+   <object xj:name="type" xj:type="null">null</object>
+   <object xj:name="displayName" xj:type="boolean">true</object>
+   <object xj:name="firstname" xj:type="boolean">false</object>
+   <object xj:name="lastname" xj:type="float">1.2</object>
+   <object xj:name="role" xj:type="float">2.1e10</object>
+   <object xj:name="base64" xj:type="string">SGFsbG8K</object>
+   <object xj:name="company" xj:type="string">8</object>
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test12.json b/components/camel-xj/src/test/resources/xml2json/test12.json
new file mode 100644
index 0000000..69d45da
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test12.json
@@ -0,0 +1,12 @@
+[
+  {
+    "id": 1,
+    "type": null,
+    "displayName": true,
+    "firstname": false,
+    "lastname": 1.2,
+    "role": 2.1e10,
+    "base64": "SGFsbG8K",
+    "company": "8"
+  }
+]
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test12.xml b/components/camel-xj/src/test/resources/xml2json/test12.xml
new file mode 100644
index 0000000..2a00facd
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test12.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj" xj:type="array">
+   <object xmlns:xj="http://camel.apache.org/component/xj" xj:type="object">
+      <object xj:name="id" xj:type="int">1</object>
+      <object xj:name="type" xj:type="null">null</object>
+      <object xj:name="displayName" xj:type="boolean">true</object>
+      <object xj:name="firstname" xj:type="boolean">false</object>
+      <object xj:name="lastname" xj:type="float">1.2</object>
+      <object xj:name="role" xj:type="float">2.1e10</object>
+      <object xj:name="base64" xj:type="string">SGFsbG8K</object>
+      <object xj:name="company" xj:type="string">8</object>
+   </object>
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test13.json b/components/camel-xj/src/test/resources/xml2json/test13.json
new file mode 100644
index 0000000..f506b8c
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test13.json
@@ -0,0 +1,14 @@
+{
+  "id": 1,
+  "type": null,
+  "displayName": true,
+  "firstname": false,
+  "lastname": 1.2,
+  "role": 2.1e10,
+  "base64": "SGFsbG8K",
+  "company": "8",
+  "#text": [
+    "\n   text1\n   ",
+    "\n   text2\n"
+  ]
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test13.xml b/components/camel-xj/src/test/resources/xml2json/test13.xml
new file mode 100644
index 0000000..9abb259
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test13.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj" xj:type="object">
+   text1
+   <object xj:name="id" xj:type="int">1</object>
+   <object xj:name="type" xj:type="null">null</object>
+   <object xj:name="displayName" xj:type="boolean">true</object>
+   <object xj:name="firstname" xj:type="boolean">false</object>
+   <object xj:name="lastname" xj:type="float">1.2</object>
+   <object xj:name="role" xj:type="float">2.1e10</object>
+   <object xj:name="base64" xj:type="string">SGFsbG8K</object>
+   <object xj:name="company" xj:type="string">8</object>
+   text2
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test14.json b/components/camel-xj/src/test/resources/xml2json/test14.json
new file mode 100644
index 0000000..3304b37
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test14.json
@@ -0,0 +1,20 @@
+{
+  "id": {
+    "id": "b",
+    "#text": 1
+  },
+  "type": {
+    "b": "c",
+    "#text": null
+  },
+  "displayName": true,
+  "firstname": false,
+  "lastname": 1.2,
+  "role": 2.1e10,
+  "base64": "SGFsbG8K",
+  "company": "8",
+  "#text": [
+    "\n   text1\n   ",
+    "\n   text2\n"
+  ]
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test14.xml b/components/camel-xj/src/test/resources/xml2json/test14.xml
new file mode 100644
index 0000000..3190fb2
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test14.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj">
+   text1
+   <object xj:name="id" xj:type="int" id="b">1</object>
+   <object xj:name="type" xj:type="null" b="c">null</object>
+   <object xj:name="displayName" xj:type="boolean">true</object>
+   <object xj:name="firstname" xj:type="boolean">false</object>
+   <object xj:name="lastname" xj:type="float">1.2</object>
+   <object xj:name="role" xj:type="float">2.1e10</object>
+   <object xj:name="base64" xj:type="string">SGFsbG8K</object>
+   <object xj:name="company" xj:type="string">8</object>
+   text2
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test15.json b/components/camel-xj/src/test/resources/xml2json/test15.json
new file mode 100644
index 0000000..05f98ae
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test15.json
@@ -0,0 +1,12 @@
+[
+  "\n   text1\n   ",
+  1,
+  null,
+  true,
+  false,
+  1.2,
+  2.1e10,
+  "SGFsbG8K",
+  "8",
+  "\n   text2\n"
+]
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test15.xml b/components/camel-xj/src/test/resources/xml2json/test15.xml
new file mode 100644
index 0000000..fd9dbe7
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test15.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj" xj:type="array">
+   text1
+   <object xj:name="id" xj:type="int">1</object>
+   <object xj:name="type" xj:type="null">null</object>
+   <object xj:name="displayName" xj:type="boolean">true</object>
+   <object xj:name="firstname" xj:type="boolean">false</object>
+   <object xj:name="lastname" xj:type="float">1.2</object>
+   <object xj:name="role" xj:type="float">2.1e10</object>
+   <object xj:name="base64" xj:type="string">SGFsbG8K</object>
+   <object xj:name="company" xj:type="string">8</object>
+   text2
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test16.json b/components/camel-xj/src/test/resources/xml2json/test16.json
new file mode 100644
index 0000000..50b7d21
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test16.json
@@ -0,0 +1,3 @@
+{
+  "test": "<!DOCTYPE html>\n      <html class=\"client-nojs\" lang=\"de\" dir=\"ltr\">\n      <head>\n      <meta charset=\"UTF-8\"/>\n      <title>Extensible Markup Language – Wikipedia</title>\n      <script>document.documentElement.className=document.documentElement.className.replace(/(^|\\s)client-nojs(\\s|$)/,\"$1client-js$2\");RLCONF={\"wgCanonicalNamespace\":\"\",\"wgCanonicalSpecialPageName\":!1,\"wgNamespaceNumber\":0,\"wgPageName\":\"Extensible_Markup_Language\",\"wgTitle\":\"E [...]
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test16.xml b/components/camel-xj/src/test/resources/xml2json/test16.xml
new file mode 100644
index 0000000..d53cc45
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test16.xml
@@ -0,0 +1,713 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj">
+   <test>&lt;!DOCTYPE html&gt;
+      &lt;html class="client-nojs" lang="de" dir="ltr"&gt;
+      &lt;head&gt;
+      &lt;meta charset="UTF-8"/&gt;
+      &lt;title&gt;Extensible Markup Language – Wikipedia&lt;/title&gt;
+      &lt;script&gt;document.documentElement.className=document.documentElement.className.replace(/(^|\s)client-nojs(\s|$)/,"$1client-js$2");RLCONF={"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":!1,"wgNamespaceNumber":0,"wgPageName":"Extensible_Markup_Language","wgTitle":"Extensible Markup Language","wgCurRevisionId":190034957,"wgRevisionId":190034957,"wgArticleId":5730,"wgIsArticle":!0,"wgIsRedirect":!1,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["W [...]
+      "Jul.","Aug.","Sep.","Okt.","Nov.","Dez."],"wgRelevantPageName":"Extensible_Markup_Language","wgRelevantArticleId":5730,"wgRequestId":"XSlhkwpAMFEAACn1mTgAAAAA","wgCSPNonce":!1,"wgIsProbablyEditable":!0,"wgRelevantPageIsProbablyEditable":!0,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgFlaggedRevsParams":{"tags":{"accuracy":{"levels":1,"quality":2,"pristine":4}}},"wgStableRevisionId":190034957,"wgMediaViewerOnClick":!0,"wgMediaViewerEnabledByDefault":!0,"wgPopupsReferencePreview [...]
+      "ext.globalCssJs.user.styles":"ready","ext.globalCssJs.site.styles":"ready","site.styles":"ready","noscript":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","ext.globalCssJs.site":"ready","user":"ready","user.options":"loading","user.tokens":"loading","ext.flaggedRevs.icons":"ready","oojs-ui-core.styles":"ready","oojs-ui.styles.indicators":"ready","mediawiki.widgets.styles":"ready","oojs-ui-core.icons":"ready","ext.cite.styles":"ready","ext.pygments":"ready","mediawiki [...]
+      "ext.flaggedRevs.advanced","ext.gadget.editMenus","ext.gadget.WikiMiniAtlas","ext.gadget.OpenStreetMap","ext.gadget.CommonsDirekt","ext.centralauth.centralautologin","mmv.head","mmv.bootstrap.autostart","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.compactlinks","ext.uls.interface","ext.quicksurveys.init","ext.centralNotice.geoIP","ext.centralNotice.startUp","skins.v [...]
+      &lt;script&gt;(RLQ=window.RLQ||[]).push(function(){mw.loader.implement("user.options@1wzrrbt",function($,jQuery,require,module){/*@nomin*/mw.user.options.set({"variant":"de"});
+      });mw.loader.implement("user.tokens@0tffind",function($,jQuery,require,module){/*@nomin*/mw.user.tokens.set({"editToken":"+\\","patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"});
+      });});&lt;/script&gt;
+      &lt;link rel="stylesheet" href="/w/load.php?lang=de&amp;modules=ext.3d.styles%7Cext.cite.styles%7Cext.flaggedRevs.basic%2Cicons%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cmediawiki.legacy.commonPrint%2Cshared%7Cmediawiki.skinning.interface%7Cmediawiki.toc.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.styles%7Cwikibase.client.init&amp;only=styles&amp;skin=vec [...]
+      &lt;script async="" src="/w/load.php?lang=de&amp;modules=startup&amp;only=scripts&amp;raw=1&amp;skin=vector"&gt;&lt;/script&gt;
+      &lt;meta name="ResourceLoaderDynamicStyles" content=""/&gt;
+      &lt;link rel="stylesheet" href="/w/load.php?lang=de&amp;modules=site.styles&amp;only=styles&amp;skin=vector"/&gt;
+      &lt;meta name="generator" content="MediaWiki 1.34.0-wmf.13"/&gt;
+      &lt;meta name="referrer" content="origin"/&gt;
+      &lt;meta name="referrer" content="origin-when-crossorigin"/&gt;
+      &lt;meta name="referrer" content="origin-when-cross-origin"/&gt;
+      &lt;meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/XML_%28de%29.svg/1200px-XML_%28de%29.svg.png"/&gt;
+      &lt;link rel="alternate" href="android-app://org.wikipedia/http/de.m.wikipedia.org/wiki/Extensible_Markup_Language"/&gt;
+      &lt;link rel="alternate" type="application/x-wiki" title="Seite bearbeiten" href="/w/index.php?title=Extensible_Markup_Language&amp;action=edit"/&gt;
+      &lt;link rel="edit" title="Seite bearbeiten" href="/w/index.php?title=Extensible_Markup_Language&amp;action=edit"/&gt;
+      &lt;link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"/&gt;
+      &lt;link rel="shortcut icon" href="/static/favicon/wikipedia.ico"/&gt;
+      &lt;link rel="search" type="application/opensearchdescription+xml" href="/w/opensearch_desc.php" title="Wikipedia (de)"/&gt;
+      &lt;link rel="EditURI" type="application/rsd+xml" href="//de.wikipedia.org/w/api.php?action=rsd"/&gt;
+      &lt;link rel="license" href="//creativecommons.org/licenses/by-sa/3.0/"/&gt;
+      &lt;link rel="canonical" href="https://de.wikipedia.org/wiki/Extensible_Markup_Language"/&gt;
+      &lt;link rel="dns-prefetch" href="//login.wikimedia.org"/&gt;
+      &lt;link rel="dns-prefetch" href="//meta.wikimedia.org" /&gt;
+      &lt;!--[if lt IE 9]&gt;&lt;script src="/w/resources/lib/html5shiv/html5shiv.js"&gt;&lt;/script&gt;&lt;![endif]--&gt;
+      &lt;/head&gt;
+      &lt;body class="mediawiki ltr sitedir-ltr capitalize-all-nouns mw-hide-empty-elt ns-0 ns-subject mw-editable page-Extensible_Markup_Language rootpage-Extensible_Markup_Language skin-vector action-view"&gt;
+      &lt;div id="mw-page-base" class="noprint"&gt;&lt;/div&gt;
+      &lt;div id="mw-head-base" class="noprint"&gt;&lt;/div&gt;
+      &lt;div id="content" class="mw-body" role="main"&gt;
+      &lt;a id="top"&gt;&lt;/a&gt;
+      &lt;div id="siteNotice" class="mw-body-content"&gt;&lt;!-- CentralNotice --&gt;&lt;/div&gt;
+      &lt;div class="mw-indicators mw-body-content"&gt;
+      &lt;/div&gt;
+
+      &lt;h1 id="firstHeading" class="firstHeading" lang="de"&gt;Extensible Markup Language&lt;/h1&gt;
+
+      &lt;div id="bodyContent" class="mw-body-content"&gt;
+      &lt;div id="siteSub" class="noprint"&gt;aus Wikipedia, der freien Enzyklopädie&lt;/div&gt;
+      &lt;div id="contentSub"&gt;&lt;/div&gt;
+
+
+
+      &lt;div id="jump-to-nav"&gt;&lt;/div&gt;
+      &lt;a class="mw-jump-link" href="#mw-head"&gt;Zur Navigation springen&lt;/a&gt;
+      &lt;a class="mw-jump-link" href="#p-search"&gt;Zur Suche springen&lt;/a&gt;
+      &lt;div id="mw-content-text" lang="de" dir="ltr" class="mw-content-ltr"&gt;&lt;div class="mw-parser-output"&gt;&lt;table class="infobox float-right toptextcells hintergrundfarbe1" id="vorlage-infobox-dateiformat" summary="Infobox Dateiformat" style="width:23em; margin: 0 0 1em 1em; border:solid 1px #BBBBBB; font-size: 90%; padding:2px;"&gt;
+
+      &lt;tbody&gt;&lt;tr&gt;
+      &lt;th colspan="2" style="text-align: center;"&gt;Extensible Markup Language
+      &lt;/th&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td colspan="2" style="text-align:center;"&gt;&lt;a href="/wiki/Datei:XML_(de).svg" class="image" title="XML-Beispiel"&gt;&lt;img alt="XML-Beispiel" src="//upload.wikimedia.org/wikipedia/commons/thumb/e/e9/XML_%28de%29.svg/200px-XML_%28de%29.svg.png" decoding="async" width="200" height="228" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/e/e9/XML_%28de%29.svg/300px-XML_%28de%29.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/e9/XML_%28de%29.svg/400px-XML_% [...]
+      &lt;/td&gt;&lt;/tr&gt;
+
+
+
+
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;"&gt;&lt;a href="/wiki/Dateinamenserweiterung" title="Dateinamenserweiterung"&gt;Dateiendung&lt;/a&gt;:
+      &lt;/td&gt;
+      &lt;td&gt;&lt;code style="margin:0.2em; padding:0;"&gt;.xml&lt;/code&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td style="white-space:nowrap;"&gt;&lt;a href="/wiki/Internet_Media_Type" title="Internet Media Type"&gt;MIME-Type&lt;/a&gt;:
+      &lt;/td&gt;
+      &lt;td&gt;&lt;span class="mw-code" style="line-height: 1.1em; margin:0.2em; padding:0;"&gt;application/xml, text/xml&lt;/span&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td style="white-space: wrap;"&gt;&lt;a href="/wiki/Magische_Zahl_(Informatik)" title="Magische Zahl (Informatik)"&gt;Magische Zahl&lt;/a&gt;:
+      &lt;/td&gt;
+      &lt;td&gt;&lt;span style="background:#DDD; padding-left:3px; padding-right:3px; font-family:monospace;"&gt;3C 3F 78 6D 6C&lt;/span&gt; &lt;sub&gt;&lt;small&gt;&lt;a href="/wiki/Hexadezimalsystem" title="Hexadezimalsystem"&gt;hex&lt;/a&gt;&lt;/small&gt;&lt;/sub&gt;&lt;br /&gt; &lt;span style="background:#DDD; padding-left:3px; padding-right:3px; font-family:monospace;"&gt;&lt;?xml&lt;/span&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;"&gt;Entwickelt von:
+      &lt;/td&gt;
+      &lt;td&gt;&lt;a href="/wiki/World_Wide_Web_Consortium" title="World Wide Web Consortium"&gt;World Wide Web Consortium&lt;/a&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+
+
+
+
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;"&gt;Art:
+      &lt;/td&gt;
+      &lt;td&gt;&lt;a href="/wiki/Auszeichnungssprache" title="Auszeichnungssprache"&gt;Auszeichnungssprache&lt;/a&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+
+
+
+
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;"&gt;Erweitert von:
+      &lt;/td&gt;
+      &lt;td&gt;&lt;a href="/wiki/Standard_Generalized_Markup_Language" title="Standard Generalized Markup Language"&gt;SGML&lt;/a&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;"&gt;Erweitert zu:
+      &lt;/td&gt;
+      &lt;td&gt;&lt;a href="/wiki/XHTML" class="mw-redirect" title="XHTML"&gt;XHTML&lt;/a&gt;, &lt;a href="/wiki/RSS_(Web-Feed)" title="RSS (Web-Feed)"&gt;RSS&lt;/a&gt;, &lt;a href="/wiki/Atom_(Format)" title="Atom (Format)"&gt;Atom&lt;/a&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+
+
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;"&gt;&lt;a href="/wiki/Website" title="Website"&gt;Website&lt;/a&gt;:
+      &lt;/td&gt;
+      &lt;td&gt;&lt;a rel="nofollow" class="external text" href="http://www.w3.org/TR/2008/REC-xml-20081126/"&gt;1.0 (Fifth Edition)&lt;/a&gt;&lt;br /&gt;&lt;a rel="nofollow" class="external text" href="http://www.w3.org/TR/2006/REC-xml11-20060816/"&gt;1.1 (Second Edition)&lt;/a&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td colspan="2" style="display:none"&gt;&lt;a href="/w/index.php?title=Vorlage:Infobox_Dateiformat/Wartung/MagischeZahl_fehlt&amp;action=edit&amp;redlink=1" class="new" title="Vorlage:Infobox Dateiformat/Wartung/MagischeZahl fehlt (Seite nicht vorhanden)"&gt;&lt;/a&gt;
+      &lt;p&gt;&lt;br /&gt;
+      &lt;a href="/w/index.php?title=Vorlage:Infobox_Dateiformat/Wartung/Standard_fehlt&amp;action=edit&amp;redlink=1" class="new" title="Vorlage:Infobox Dateiformat/Wartung/Standard fehlt (Seite nicht vorhanden)"&gt;&lt;/a&gt;
+      &lt;/p&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td colspan="2"&gt;
+      &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
+      &lt;p&gt;Die &lt;b&gt;Extensible Markup Language&lt;/b&gt; (dt. &lt;i&gt;Erweiterbare Auszeichnungssprache&lt;/i&gt;), abgekürzt &lt;b&gt;XML&lt;/b&gt;, ist eine &lt;a href="/wiki/Auszeichnungssprache" title="Auszeichnungssprache"&gt;Auszeichnungssprache&lt;/a&gt; zur Darstellung hierarchisch strukturierter Daten im Format einer &lt;a href="/wiki/Textdatei" title="Textdatei"&gt;Textdatei&lt;/a&gt;, die sowohl von &lt;a href="/wiki/Menschenlesbarkeit" title="Menschenlesbarkeit"&gt;M [...]
+      &lt;/p&gt;&lt;p&gt;XML wird auch für den plattform- und &lt;a href="/wiki/Implementierung" title="Implementierung"&gt;implementationsunabhängigen&lt;/a&gt; Austausch von Daten zwischen &lt;a href="/wiki/Computer" title="Computer"&gt;Computersystemen&lt;/a&gt; eingesetzt, insbesondere über das &lt;a href="/wiki/Internet" title="Internet"&gt;Internet&lt;/a&gt;, und wurde vom &lt;a href="/wiki/World_Wide_Web_Consortium" title="World Wide Web Consortium"&gt;World Wide Web Consortium&lt [...]
+      &lt;/p&gt;&lt;p&gt;Die Standardzeichenkodierung eines XML-Dokumentes ist &lt;a href="/wiki/UTF-8" title="UTF-8"&gt;UTF-8&lt;/a&gt;. XML-bearbeitende Systeme müssen die Kodierungen UTF-8 und &lt;a href="/wiki/UTF-16" title="UTF-16"&gt;UTF-16&lt;/a&gt; beherrschen.&lt;sup id="cite_ref-3" class="reference"&gt;&lt;a href="#cite_note-3"&gt;&#91;3&#93;&lt;/a&gt;&lt;/sup&gt; XML-Dokumente, die UTF-8 oder UTF-16 verwenden, können in allen Texteditoren, die diese Kodierungen unterstützen, a [...]
+      &lt;/p&gt;&lt;p&gt;Wenn das XML-Dokument Binärdaten enthalten soll, müssen diese Daten als Text umkodiert werden. Dazu kann z.&#160;B. die &lt;a href="/wiki/Base64" title="Base64"&gt;Base64&lt;/a&gt;-Kodierung verwendet werden.
+      &lt;/p&gt;
+      &lt;div id="toc" class="toc"&gt;&lt;input type="checkbox" role="button" id="toctogglecheckbox" class="toctogglecheckbox" style="display:none" /&gt;&lt;div class="toctitle" lang="de" dir="ltr"&gt;&lt;h2&gt;Inhaltsverzeichnis&lt;/h2&gt;&lt;span class="toctogglespan"&gt;&lt;label class="toctogglelabel" for="toctogglecheckbox"&gt;&lt;/label&gt;&lt;/span&gt;&lt;/div&gt;
+      &lt;ul&gt;
+      &lt;li class="toclevel-1 tocsection-1"&gt;&lt;a href="#Fachbegriffe"&gt;&lt;span class="tocnumber"&gt;1&lt;/span&gt; &lt;span class="toctext"&gt;Fachbegriffe&lt;/span&gt;&lt;/a&gt;
+      &lt;ul&gt;
+      &lt;li class="toclevel-2 tocsection-2"&gt;&lt;a href="#Element"&gt;&lt;span class="tocnumber"&gt;1.1&lt;/span&gt; &lt;span class="toctext"&gt;Element&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-3"&gt;&lt;a href="#Tag"&gt;&lt;span class="tocnumber"&gt;1.2&lt;/span&gt; &lt;span class="toctext"&gt;Tag&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-4"&gt;&lt;a href="#Wohlgeformtheit"&gt;&lt;span class="tocnumber"&gt;1.3&lt;/span&gt; &lt;span class="toctext"&gt;Wohlgeformtheit&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-5"&gt;&lt;a href="#Gültigkeit_(Validität)"&gt;&lt;span class="tocnumber"&gt;1.4&lt;/span&gt; &lt;span class="toctext"&gt;Gültigkeit (Validität)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-6"&gt;&lt;a href="#Parser"&gt;&lt;span class="tocnumber"&gt;1.5&lt;/span&gt; &lt;span class="toctext"&gt;Parser&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-7"&gt;&lt;a href="#Aufbau_eines_XML-Dokuments"&gt;&lt;span class="tocnumber"&gt;2&lt;/span&gt; &lt;span class="toctext"&gt;Aufbau eines XML-Dokuments&lt;/span&gt;&lt;/a&gt;
+      &lt;ul&gt;
+      &lt;li class="toclevel-2 tocsection-8"&gt;&lt;a href="#Physischer_Aufbau"&gt;&lt;span class="tocnumber"&gt;2.1&lt;/span&gt; &lt;span class="toctext"&gt;Physischer Aufbau&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-9"&gt;&lt;a href="#Logischer_Aufbau"&gt;&lt;span class="tocnumber"&gt;2.2&lt;/span&gt; &lt;span class="toctext"&gt;Logischer Aufbau&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-10"&gt;&lt;a href="#DTD"&gt;&lt;span class="tocnumber"&gt;3&lt;/span&gt; &lt;span class="toctext"&gt;DTD&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-11"&gt;&lt;a href="#Lesbarkeit_von_XML-Dokumenten"&gt;&lt;span class="tocnumber"&gt;4&lt;/span&gt; &lt;span class="toctext"&gt;Lesbarkeit von XML-Dokumenten&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-12"&gt;&lt;a href="#Klassifizierung_von_XML-Dokumenten"&gt;&lt;span class="tocnumber"&gt;5&lt;/span&gt; &lt;span class="toctext"&gt;Klassifizierung von XML-Dokumenten&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-13"&gt;&lt;a href="#Verarbeitung_von_XML"&gt;&lt;span class="tocnumber"&gt;6&lt;/span&gt; &lt;span class="toctext"&gt;Verarbeitung von XML&lt;/span&gt;&lt;/a&gt;
+      &lt;ul&gt;
+      &lt;li class="toclevel-2 tocsection-14"&gt;&lt;a href="#Verarbeitungskriterien"&gt;&lt;span class="tocnumber"&gt;6.1&lt;/span&gt; &lt;span class="toctext"&gt;Verarbeitungskriterien&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-15"&gt;&lt;a href="#Programmgesteuerter_Zugriff_auf_XML-Dokumente"&gt;&lt;span class="tocnumber"&gt;6.2&lt;/span&gt; &lt;span class="toctext"&gt;Programmgesteuerter Zugriff auf XML-Dokumente&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-16"&gt;&lt;a href="#XML-Parser-API-Beispiele"&gt;&lt;span class="tocnumber"&gt;6.3&lt;/span&gt; &lt;span class="toctext"&gt;XML-Parser-API-Beispiele&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-17"&gt;&lt;a href="#Transformation_und_Darstellung_von_XML-Dokumenten"&gt;&lt;span class="tocnumber"&gt;6.4&lt;/span&gt; &lt;span class="toctext"&gt;Transformation und Darstellung von XML-Dokumenten&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-18"&gt;&lt;a href="#Schemasprachen"&gt;&lt;span class="tocnumber"&gt;7&lt;/span&gt; &lt;span class="toctext"&gt;Schemasprachen&lt;/span&gt;&lt;/a&gt;
+      &lt;ul&gt;
+      &lt;li class="toclevel-2 tocsection-19"&gt;&lt;a href="#XML_Schema/XSD"&gt;&lt;span class="tocnumber"&gt;7.1&lt;/span&gt; &lt;span class="toctext"&gt;XML Schema/XSD&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-20"&gt;&lt;a href="#Weitere_Schemasprachen"&gt;&lt;span class="tocnumber"&gt;7.2&lt;/span&gt; &lt;span class="toctext"&gt;Weitere Schemasprachen&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-21"&gt;&lt;a href="#XML-Familie"&gt;&lt;span class="tocnumber"&gt;8&lt;/span&gt; &lt;span class="toctext"&gt;XML-Familie&lt;/span&gt;&lt;/a&gt;
+      &lt;ul&gt;
+      &lt;li class="toclevel-2 tocsection-22"&gt;&lt;a href="#Infrastruktur"&gt;&lt;span class="tocnumber"&gt;8.1&lt;/span&gt; &lt;span class="toctext"&gt;Infrastruktur&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-2 tocsection-23"&gt;&lt;a href="#Sprachen"&gt;&lt;span class="tocnumber"&gt;8.2&lt;/span&gt; &lt;span class="toctext"&gt;Sprachen&lt;/span&gt;&lt;/a&gt;
+      &lt;ul&gt;
+      &lt;li class="toclevel-3 tocsection-24"&gt;&lt;a href="#Text"&gt;&lt;span class="tocnumber"&gt;8.2.1&lt;/span&gt; &lt;span class="toctext"&gt;Text&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-3 tocsection-25"&gt;&lt;a href="#Grafik"&gt;&lt;span class="tocnumber"&gt;8.2.2&lt;/span&gt; &lt;span class="toctext"&gt;Grafik&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-3 tocsection-26"&gt;&lt;a href="#Geodaten"&gt;&lt;span class="tocnumber"&gt;8.2.3&lt;/span&gt; &lt;span class="toctext"&gt;Geodaten&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-3 tocsection-27"&gt;&lt;a href="#Multimedia"&gt;&lt;span class="tocnumber"&gt;8.2.4&lt;/span&gt; &lt;span class="toctext"&gt;Multimedia&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-3 tocsection-28"&gt;&lt;a href="#Sicherheit"&gt;&lt;span class="tocnumber"&gt;8.2.5&lt;/span&gt; &lt;span class="toctext"&gt;Sicherheit&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-3 tocsection-29"&gt;&lt;a href="#Ingenieurwissenschaften"&gt;&lt;span class="tocnumber"&gt;8.2.6&lt;/span&gt; &lt;span class="toctext"&gt;Ingenieurwissenschaften&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-3 tocsection-30"&gt;&lt;a href="#Weitere"&gt;&lt;span class="tocnumber"&gt;8.2.7&lt;/span&gt; &lt;span class="toctext"&gt;Weitere&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-31"&gt;&lt;a href="#Alternative_Formate"&gt;&lt;span class="tocnumber"&gt;9&lt;/span&gt; &lt;span class="toctext"&gt;Alternative Formate&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-32"&gt;&lt;a href="#Trivia"&gt;&lt;span class="tocnumber"&gt;10&lt;/span&gt; &lt;span class="toctext"&gt;Trivia&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-33"&gt;&lt;a href="#Literatur"&gt;&lt;span class="tocnumber"&gt;11&lt;/span&gt; &lt;span class="toctext"&gt;Literatur&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-34"&gt;&lt;a href="#Weblinks"&gt;&lt;span class="tocnumber"&gt;12&lt;/span&gt; &lt;span class="toctext"&gt;Weblinks&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;li class="toclevel-1 tocsection-35"&gt;&lt;a href="#Einzelnachweise"&gt;&lt;span class="tocnumber"&gt;13&lt;/span&gt; &lt;span class="toctext"&gt;Einzelnachweise&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;/div&gt;
+
+      &lt;h2&gt;&lt;span class="mw-headline" id="Fachbegriffe"&gt;Fachbegriffe&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=1" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Fachbegriffe"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language [...]
+      &lt;h3&gt;&lt;span class="mw-headline" id="Element"&gt;Element&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=2" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Element"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action=edi [...]
+      &lt;p&gt;Die wichtigste Struktureinheit eines XML-Dokumentes ist das &lt;a href="/w/index.php?title=Element_(Markierungssprache)&amp;action=edit&amp;redlink=1" class="new" title="Element (Markierungssprache) (Seite nicht vorhanden)"&gt;Element&lt;/a&gt;. Elemente können Text wie auch weitere Elemente als Inhalt enthalten. Elemente bilden die &lt;i&gt;Knoten&lt;/i&gt; des Strukturbaumes eines XML-Dokumentes. Der Name eines XML-Elementes kann in XML-Dokumenten ohne &lt;a href="/wiki/ [...]
+      &lt;/p&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="Tag"&gt;Tag&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=3" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Tag"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action=edit&amp;sectio [...]
+      &lt;p&gt;Für die Auszeichnung von Elementen werden Tags (Auszeichnungen) verwendet:
+      &lt;/p&gt;
+      &lt;ul&gt;&lt;li&gt;ein Starttag für den Beginn eines Elementes: &lt;code&gt;&lt;Elementname&gt;&lt;/code&gt;&lt;/li&gt;
+      &lt;li&gt;ein Endtag für das Ende eines Elementes: &lt;code&gt;&lt;/Elementname&gt;&lt;/code&gt;&lt;/li&gt;
+      &lt;li&gt;ein Leertag für ein Element ohne Inhalt: &lt;code&gt;&lt;Leerelementname/&gt;&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
+      &lt;p&gt;Siehe Hauptartikel &lt;a href="/wiki/Tag_(Informatik)" title="Tag (Informatik)"&gt;Tag&lt;/a&gt;
+      &lt;/p&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="Wohlgeformtheit"&gt;Wohlgeformtheit&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=4" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Wohlgeformtheit"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup [...]
+      &lt;p&gt;Ein XML-Dokument heißt „wohlgeformt“ (oder &lt;span style="font-style:normal;font-weight:normal"&gt;&lt;a href="/wiki/Englische_Sprache" title="Englische Sprache"&gt;englisch&lt;/a&gt;&lt;/span&gt; &lt;span lang="en-Latn" style="font-style:italic"&gt;well-formed&lt;/span&gt;), wenn es alle XML-Regeln einhält. Beispielhaft seien hier folgende genannt:
+      &lt;/p&gt;
+      &lt;ul&gt;&lt;li&gt;Das Dokument besitzt genau ein Wurzelelement. Als Wurzelelement wird dabei das jeweils äußerste Element bezeichnet, z.&#160;B. &lt;code&gt;&lt;html&gt;&lt;/code&gt; in &lt;a href="/wiki/Extensible_Hypertext_Markup_Language" title="Extensible Hypertext Markup Language"&gt;XHTML&lt;/a&gt;.&lt;/li&gt;
+      &lt;li&gt;Alle Elemente mit Inhalt besitzen einen Start- und einen Endtag (z.&#160;B. &lt;code&gt;&lt;eintrag&gt;Eintrag 1&lt;/eintrag&gt;&lt;/code&gt;). Elemente ohne Inhalt können mit einem Leertag gekennzeichnet werden (z.&#160;B. &lt;code&gt;&lt;eintrag /&gt;&lt;/code&gt;).&lt;/li&gt;
+      &lt;li&gt;Die Start- und Endtags sind ebenentreu-paarig verschachtelt. Das bedeutet, dass alle Elemente  geschlossen werden müssen, bevor die End-Auszeichner des entsprechenden Elternelements oder die Beginn-Auszeichner eines Geschwisterelements erscheinen.&lt;/li&gt;
+      &lt;li&gt;Ein Element darf nicht mehrere &lt;a href="/wiki/Attribut_(Auszeichnungssprache)" title="Attribut (Auszeichnungssprache)"&gt;Attribute&lt;/a&gt; mit demselben Namen besitzen.&lt;/li&gt;
+      &lt;li&gt;Attributwerte müssen in &lt;a href="/wiki/Anf%C3%BChrungszeichen" title="Anführungszeichen"&gt;Anführungszeichen&lt;/a&gt; stehen (&lt;code&gt;"..."&lt;/code&gt; oder  &lt;code&gt;'...'&lt;/code&gt;).&lt;/li&gt;
+      &lt;li&gt;Die Start- und Endtags beachten die Groß- und Kleinschreibung (z.&#160;B. &lt;code&gt;&lt;eintrag&gt;&lt;/Eintrag&gt;&lt;/code&gt; ist nicht gültig).&lt;/li&gt;&lt;/ul&gt;
+      &lt;h3&gt;&lt;span id="G.C3.BCltigkeit_.28Validit.C3.A4t.29"&gt;&lt;/span&gt;&lt;span class="mw-headline" id="Gültigkeit_(Validität)"&gt;Gültigkeit (Validität)&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=5" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Gültigkeit (Validität)"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw- [...]
+      &lt;p&gt;Soll XML für den &lt;a href="/wiki/Datenaustausch" title="Datenaustausch"&gt;Datenaustausch&lt;/a&gt; verwendet werden, ist es von Vorteil, wenn das Format mittels einer &lt;a href="/wiki/Formale_Grammatik" title="Formale Grammatik"&gt;Grammatik&lt;/a&gt; (z.&#160;B. einer &lt;a href="/wiki/Dokumenttypdefinition" title="Dokumenttypdefinition"&gt;Dokumenttypdefinition&lt;/a&gt; oder eines &lt;a href="/wiki/XML_Schema" title="XML Schema"&gt;XML-Schemas&lt;/a&gt;) definiert i [...]
+      &lt;/p&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="Parser"&gt;Parser&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=6" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Parser"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action=edit&a [...]
+      &lt;p&gt;&lt;a href="/wiki/Computerprogramm" title="Computerprogramm"&gt;Programme&lt;/a&gt; oder Programmteile, die XML-Daten auslesen, interpretieren und ggf. auf Gültigkeit prüfen, nennt man &lt;i&gt;XML-&lt;a href="/wiki/Parser" title="Parser"&gt;Parser&lt;/a&gt;&lt;/i&gt;. Prüft der Parser die Gültigkeit, so ist er ein &lt;i&gt;validierender&lt;/i&gt; Parser.
+      &lt;/p&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="Aufbau_eines_XML-Dokuments"&gt;Aufbau eines XML-Dokuments&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=7" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Aufbau eines XML-Dokuments"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/ [...]
+      &lt;p&gt;&lt;i&gt;Beispiel einer XML-Datei&lt;/i&gt;
+      &lt;/p&gt;
+      &lt;div class="mw-highlight mw-content-ltr" dir="ltr"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="cp"&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;verzeichnis&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;titel&gt;&lt;/span&gt;Wikipedia Städteverzeichnis&lt;span class="nt"&gt;&lt;/titel&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;eintrag&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;stichwort&gt;&lt;/span&gt;Genf&lt;span class="nt"&gt;&lt;/stichwort&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;eintragstext&gt;&lt;/span&gt;Genf ist der Sitz von ...&lt;span class="nt"&gt;&lt;/eintragstext&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;/eintrag&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;eintrag&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;stichwort&gt;&lt;/span&gt;Köln&lt;span class="nt"&gt;&lt;/stichwort&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;eintragstext&gt;&lt;/span&gt;Köln ist eine Stadt, die ...&lt;span class="nt"&gt;&lt;/eintragstext&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;/eintrag&gt;&lt;/span&gt;
+      &lt;span class="nt"&gt;&lt;/verzeichnis&gt;&lt;/span&gt;
+      &lt;/pre&gt;&lt;/div&gt;
+      &lt;p&gt;XML-Dokumente besitzen einen physischen und einen logischen Aufbau.
+      &lt;/p&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="Physischer_Aufbau"&gt;Physischer Aufbau&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=8" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Physischer Aufbau"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_ [...]
+      &lt;ul&gt;&lt;li&gt;Die Dokument-Entität (engl. &lt;i&gt;Document entity&lt;/i&gt;) enthält das Hauptdokument.&lt;/li&gt;
+      &lt;li&gt;Weitere mögliche Entitäten sind über
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/Entit%C3%A4ten_in_Auszeichnungssprachen" class="mw-redirect" title="Entitäten in Auszeichnungssprachen"&gt;Entitätenreferenzen&lt;/a&gt; (&lt;code&gt;&lt;i&gt;&amp;name;&lt;/i&gt;&lt;/code&gt; für das Dokument bzw. &lt;code&gt;&lt;i&gt;%name;&lt;/i&gt;&lt;/code&gt; für die Dokumenttypdefinition) eingebundene Zeichenketten, eventuell auch ganze Dateien, sowie Referenzen auf Zeichenentitäten zur Einbindung einzelner Zeichen, die über ihre Nummer  [...]
+      &lt;li&gt;Eine &lt;a href="/wiki/XML-Deklaration" title="XML-Deklaration"&gt;XML-Deklaration&lt;/a&gt; wird verwendet, um XML-Version, Zeichenkodierung und eine mögliche Verarbeitbarkeit ohne &lt;a href="/wiki/Dokumenttypdefinition" title="Dokumenttypdefinition"&gt;DTD&lt;/a&gt; zu spezifizieren.&lt;/li&gt;
+      &lt;li&gt;Eine &lt;a href="/wiki/Dokumenttypdefinition" title="Dokumenttypdefinition"&gt;Dokumenttypdefinition&lt;/a&gt; wird verwendet, um Entitäten sowie den erlaubten logischen Aufbau zu spezifizieren. Die Verwendung einer &lt;a href="/wiki/Dokumenttypdefinition" title="Dokumenttypdefinition"&gt;DTD&lt;/a&gt; kann in der &lt;a href="/wiki/XML-Deklaration" title="XML-Deklaration"&gt;XML-Deklaration&lt;/a&gt; abgewählt werden.&lt;/li&gt;&lt;/ul&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="Logischer_Aufbau"&gt;Logischer Aufbau&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=9" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Logischer Aufbau"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Mar [...]
+      &lt;p&gt;Der logische Aufbau entspricht einer Baumstruktur und ist damit hierarchisch organisiert.
+      Als Baumknoten gibt es:
+      &lt;/p&gt;
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/Element_(Auszeichnungssprache)" title="Element (Auszeichnungssprache)"&gt;Elemente&lt;/a&gt;, deren physische Auszeichnung mittels
+      &lt;ul&gt;&lt;li&gt;eines passenden Paars aus Starttag &lt;code&gt;&lt;&lt;i&gt;Tagname&lt;/i&gt;&gt;&lt;/code&gt; und End-Tag &lt;code&gt;&lt;/&lt;i&gt;Tagname&lt;/i&gt;&gt;&lt;/code&gt; oder&lt;/li&gt;
+      &lt;li&gt;eines Leertags &lt;code&gt;&lt;&lt;i&gt;Tagname&lt;/i&gt;/&gt;&lt;/code&gt; erfolgen kann,&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Attribut_(Auszeichnungssprache)" title="Attribut (Auszeichnungssprache)"&gt;Attribute&lt;/a&gt; als bei einem Starttag oder Leertag geschriebene zusätzliche Eigenschaften der Elemente in der Syntax &lt;code&gt;&lt;i&gt;Attributname&lt;/i&gt;="&lt;i&gt;Attributwert&lt;/i&gt;"&lt;/code&gt;,&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Verarbeitungsanweisung" title="Verarbeitungsanweisung"&gt;Verarbeitungsanweisungen&lt;/a&gt; &lt;code&gt;&lt;?&lt;i&gt;Zielname&lt;/i&gt;&#160;Daten?&gt;&lt;/code&gt; (engl. &lt;i&gt;Processing Instructions&lt;/i&gt;),&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Kommentar_(Programmierung)" title="Kommentar (Programmierung)"&gt;Kommentare&lt;/a&gt; &lt;code&gt;&lt;!--&#160;&lt;i&gt;Kommentar-Text&lt;/i&gt;&#160;--&gt;&lt;/code&gt;, und&lt;/li&gt;
+      &lt;li&gt;Text, der als normale Zeichendaten oder in Form eines &lt;a href="/wiki/CDATA" title="CDATA"&gt;CDATA&lt;/a&gt;-Abschnittes &lt;code&gt;&lt;![CDATA[&#160;&lt;i&gt;beliebiger Text&lt;/i&gt;]]&gt;&lt;/code&gt; auftreten kann.&lt;/li&gt;&lt;/ul&gt;
+      &lt;p&gt;Ein XML-Dokument muss genau ein Element auf der obersten Ebene enthalten. Unterhalb dieses Dokumentelements können weitere Elemente und Text verschachtelt werden.
+      &lt;/p&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="DTD"&gt;DTD&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=10" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: DTD"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action=edit&amp;secti [...]
+      &lt;div class="hauptartikel" role="navigation"&gt;&lt;span class="hauptartikel-pfeil" title="siehe" role="presentation"&gt;→ &lt;/span&gt;&lt;i&gt;&lt;span class="hauptartikel-text"&gt;Hauptartikel&lt;/span&gt;: &lt;a href="/wiki/Dokumenttypdefinition" title="Dokumenttypdefinition"&gt;Dokumenttypdefinition&lt;/a&gt;&lt;/i&gt;&lt;/div&gt;
+      &lt;p&gt;Eine Dokumenttypdefinition (DTD) beschreibt die Struktur und Grammatik von Dokumenten. Sie ist Systembestandteil von XML und per Standard aktiviert.
+      &lt;/p&gt;&lt;p&gt;Werden Dokumente &lt;b&gt;mit&lt;/b&gt; Bezug zu einer externen Dokumenttypdefinition oder &lt;b&gt;mit&lt;/b&gt; einer integrierten Dokumenttypdefinition erstellt, so prüft der Parser das Dokument bereits beim Öffnen (Lesen). Ein Dokument auf Basis einer Dokumenttypdefinition ist stets ein valides Dokument. Die Übereinstimmung des Dokumentinhaltes mit den Regeln der Dokumenttypdefinition steht im Vordergrund. Die technische Lesbarkeit, also auch das Lesen von ni [...]
+      &lt;/p&gt;&lt;p&gt;Dokumente &lt;b&gt;ohne&lt;/b&gt; DTD sind eher für den beliebigen Datenaustausch geeignet. Der Parser prüft diese Dokumente nur nach den Regeln der Wohlgeformtheit. Die technische Lesbarkeit steht hier an erster Stelle. Das Prüfen und Auslesen der eigentlichen Informationen wird mit nachgelagerten Prozessen realisiert.
+      &lt;/p&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="Lesbarkeit_von_XML-Dokumenten"&gt;Lesbarkeit von XML-Dokumenten&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=11" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Lesbarkeit von XML-Dokumenten"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a [...]
+      &lt;p&gt;Praktisch alle &lt;a href="/wiki/Webbrowser" title="Webbrowser"&gt;Webbrowser&lt;/a&gt; wie &lt;a href="/wiki/Apple_Safari" title="Apple Safari"&gt;Apple Safari&lt;/a&gt;, &lt;a href="/wiki/Google_Chrome" title="Google Chrome"&gt;Google Chrome&lt;/a&gt;, &lt;a href="/wiki/Internet_Explorer" title="Internet Explorer"&gt;Microsoft Internet Explorer&lt;/a&gt;, &lt;a href="/wiki/Mozilla_Firefox" title="Mozilla Firefox"&gt;Mozilla Firefox&lt;/a&gt; und &lt;a href="/wiki/Opera_( [...]
+      &lt;/p&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="Klassifizierung_von_XML-Dokumenten"&gt;Klassifizierung von XML-Dokumenten&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=12" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Klassifizierung von XML-Dokumenten"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt [...]
+      &lt;p&gt;XML-Dokumente lassen sich anhand ihres beabsichtigten Gebrauchs und ihres Strukturierungsgrads in dokumentzentrierte und datenzentrierte Dokumente unterteilen. Die Grenze zwischen diesen Dokumentenarten ist jedoch fließend. Mischformen können als &lt;i&gt;semistrukturiert&lt;/i&gt; bezeichnet werden.
+      &lt;/p&gt;
+      &lt;ul&gt;&lt;li&gt;dokumentzentriert: Das Dokument ist an ein Textdokument angelehnt, das für den menschlichen Leser größtenteils auch ohne die zusätzliche Metainformation verständlich ist. XML-Elemente werden hauptsächlich zur &lt;a href="/wiki/Formale_Semantik#Formale_Semantik_in_der_Informatik" title="Formale Semantik"&gt;semantischen&lt;/a&gt; Markierung von Passagen des Dokuments genutzt, das Dokument ist nur schwach strukturiert. Aufgrund der schwachen Strukturierung ist ein [...]
+      &lt;li&gt;datenzentriert: Das Dokument ist hauptsächlich für die maschinelle Verarbeitung bestimmt. Es folgt einem Schema, das Entitäten eines Datenmodells beschreibt und definiert, in welcher Beziehung die Entitäten zueinander stehen, sowie, welche Attribute die Entitäten haben. Das Dokument ist somit stark strukturiert und für den unmittelbaren menschlichen Gebrauch weniger geeignet.&lt;/li&gt;
+      &lt;li&gt;semistrukturiert: Semistrukturierte Dokumente stellen eine Art Mischform dar, die stärker strukturiert ist als dokumentzentrierte Dokumente, aber schwächer als datenzentrierte Dokumente.&lt;/li&gt;&lt;/ul&gt;
+      &lt;p&gt;Es ist typisch für datenzentrierte XML-Dokumente, dass Elemente entweder Elementinhalt oder Textinhalt haben. Der sogenannte gemischte Inhalt (mixed content), bei dem Elemente sowohl Text als auch Kindelemente enthalten, ist für die anderen XML-Dokumente typisch.
+      &lt;/p&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="Verarbeitung_von_XML"&gt;Verarbeitung von XML&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=13" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Verarbeitung von XML"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=E [...]
+      &lt;h3&gt;&lt;span class="mw-headline" id="Verarbeitungskriterien"&gt;Verarbeitungskriterien&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=14" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Verarbeitungskriterien"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?t [...]
+      &lt;p&gt;Grundsätzlich sind drei Aspekte beim Zugriff auf ein XML-Dokument von Bedeutung:
+      &lt;/p&gt;
+      &lt;ul&gt;&lt;li&gt;Wie erfolgt der Zugriff auf die XML-Datei: sequenziell oder wahlfrei?&lt;/li&gt;
+      &lt;li&gt;Wie ist der Ablauf beim Zugriff auf die XML-Daten gestaltet: „Push“ oder „Pull“? (Push bedeutet, dass die Ablaufkontrolle des Programms beim Parser liegt. Pull bedeutet, dass die Ablaufkontrolle im Code, der den Parser aufruft, implementiert ist.)&lt;/li&gt;
+      &lt;li&gt;Wie erfolgt das Baumstrukturmanagement der XML-Daten: hierarchisch oder verschachtelt?&lt;/li&gt;&lt;/ul&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="Programmgesteuerter_Zugriff_auf_XML-Dokumente"&gt;Programmgesteuerter Zugriff auf XML-Dokumente&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=15" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Programmgesteuerter Zugriff auf XML-Dokumente"&gt;Bearbeiten&lt;/a&gt;&lt;span class=" [...]
+      &lt;p&gt;Das Einlesen von XML-Dokumenten erfolgt auf unterster Ebene über eine spezielle Programmkomponente, einen &lt;a href="/wiki/XML-Prozessor" title="XML-Prozessor"&gt;XML-Prozessor&lt;/a&gt;, auch XML-Parser genannt. Er stellt eine &lt;a href="/wiki/Programmierschnittstelle" title="Programmierschnittstelle"&gt;Programmierschnittstelle&lt;/a&gt; (API) zur Verfügung, über die die Anwendung auf das XML-Dokument zugreift.
+      &lt;/p&gt;&lt;p&gt;Die XML-Prozessoren unterstützen dabei drei grundlegende Verarbeitungsmodelle.
+      &lt;/p&gt;
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/Document_Object_Model" title="Document Object Model"&gt;DOM&lt;/a&gt;: Ein DOM-API repräsentiert ein XML-Dokument als Baumstruktur und gewährt wahlfreien Zugriff auf die einzelnen Bestandteile der Baumstruktur. DOM erlaubt außer dem Lesen von XML-Dokumenten auch die Manipulation der Baumstruktur und das Zurückschreiben der Baumstruktur in ein XML-Dokument. Aus diesem Grund ist DOM sehr speicherintensiv.&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Simple_API_for_XML" title="Simple API for XML"&gt;SAX&lt;/a&gt;: Ein SAX-API repräsentiert ein XML-Dokument als sequentiellen Datenstrom und ruft für im Standard definierte Ereignisse vorgegebene Rückruffunktionen (callback function) auf. Eine Anwendung, die SAX nutzt, kann eigene Unterprogramme als Rückruffunktionen registrieren und auf diese Weise die XML-Daten auswerten.&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/w/index.php?title=Pull-API&amp;action=edit&amp;redlink=1" class="new" title="Pull-API (Seite nicht vorhanden)"&gt;Pull-API&lt;/a&gt;: Ein XML-Pull-API verarbeitet Daten sequenziell und bietet sowohl ereignisbasierte Verarbeitung als auch einen &lt;a href="/wiki/Iterator" title="Iterator"&gt;Iterator&lt;/a&gt; an. Es ist hoch speichereffizient und ggf. leichter zu programmieren als das SAX-API, da die Ablaufkontrolle beim Programm und nicht beim Parser liegt.& [...]
+      &lt;p&gt;Weitere Verarbeitungsmodelle:
+      &lt;/p&gt;
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/w/index.php?title=Data_Binding&amp;action=edit&amp;redlink=1" class="new" title="Data Binding (Seite nicht vorhanden)"&gt;Data Binding&lt;/a&gt;: Diese Möglichkeit stellt XML-Daten als Datenstruktur direkt für einen Programmzugriff bereit. Die XML-Daten werden per &lt;a href="/wiki/Unmarshalling" class="mw-redirect" title="Unmarshalling"&gt;Unmarshalling&lt;/a&gt; direkt in z.&#160;B. Objekte gewandelt.&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/w/index.php?title=Nicht_extrahierendes_XML-API&amp;action=edit&amp;redlink=1" class="new" title="Nicht extrahierendes XML-API (Seite nicht vorhanden)"&gt;Nicht extrahierendes XML-API&lt;/a&gt;: Die Daten werden auf Byte-Ebene sehr effizient verarbeitet.&lt;/li&gt;&lt;/ul&gt;
+      &lt;p&gt;Oftmals greift der Anwendungscode nicht direkt auf die Parser-API zu. Stattdessen wird XML weiter &lt;a href="/wiki/Datenkapselung_(Programmierung)" title="Datenkapselung (Programmierung)"&gt;gekapselt&lt;/a&gt;, so dass der Anwendungscode mit nativen Objekten / Datenstrukturen arbeitet, welche sich auf XML abstützen. Beispiele für solche Zugriffsschichten sind &lt;a href="/wiki/JAXB" class="mw-redirect" title="JAXB"&gt;JAXB&lt;/a&gt; in &lt;a href="/wiki/Java_(Programmier [...]
+      &lt;/p&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="XML-Parser-API-Beispiele"&gt;XML-Parser-API-Beispiele&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=16" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: XML-Parser-API-Beispiele"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index [...]
+      &lt;p&gt;XML-Parser-APIs sind für verschiedene Programmiersprachen vorhanden, z.&#160;B. &lt;a href="/wiki/Java_(Programmiersprache)" title="Java (Programmiersprache)"&gt;Java&lt;/a&gt;, &lt;a href="/wiki/C_(Programmiersprache)" title="C (Programmiersprache)"&gt;C&lt;/a&gt;, &lt;a href="/wiki/C%2B%2B" title="C++"&gt;C++&lt;/a&gt;, &lt;a href="/wiki/C-Sharp" title="C-Sharp"&gt;C#&lt;/a&gt;, &lt;a href="/wiki/Python_(Programmiersprache)" title="Python (Programmiersprache)"&gt;Python& [...]
+      &lt;/p&gt;
+      &lt;ul&gt;&lt;li&gt;XML::Parser (&lt;a href="/wiki/Perl_(Programmiersprache)" title="Perl (Programmiersprache)"&gt;Perl&lt;/a&gt;): Ein XML-Parser für Perl. Ein sehr einfaches API bietet z.&#160;B. auch das &lt;a href="/wiki/CPAN" title="CPAN"&gt;CPAN&lt;/a&gt;-Modul XML::Simple an.&lt;/li&gt;
+      &lt;li&gt;DOM Functions (PHP5): Modul in &lt;a href="/wiki/PHP5" class="mw-redirect" title="PHP5"&gt;PHP5&lt;/a&gt;, um XML-Dokumente einzulesen; alternativ simpleXML; für PHP4 gibt es DOM XML.&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Streaming_API_for_XML" title="Streaming API for XML"&gt;StAX (Java)&lt;/a&gt;: Eine hochgradig speichereffiziente Parserimplementierung (Pull) und gleichzeitig einfach zu programmieren. Es werden Cursor- und Iteratorverarbeitungsmodelle angeboten.&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/JAXB" class="mw-redirect" title="JAXB"&gt;JAXB&lt;/a&gt;: Data Binding für Java. Beispielsweise kann aus einem XML-Schema die entsprechende Java-Klasse generiert werden und umgekehrt.&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Apache_XMLBeans" title="Apache XMLBeans"&gt;Apache XMLBeans&lt;/a&gt; Java Data Binding Framework, kann bereits mit Java 1.4.2 verwendet werden&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Xerces" title="Xerces"&gt;Xerces&lt;/a&gt;: Ein validierender XML-Parser für C++, Java und Perl für eine große Anzahl an Plattformen.&lt;/li&gt;
+      &lt;li&gt;&lt;a rel="nofollow" class="external text" href="http://effbot.org/zone/element-iterparse.htm"&gt;ElementTree iterparse&lt;/a&gt;: Ein Parser-API für &lt;a href="/wiki/Python_(Programmiersprache)" title="Python (Programmiersprache)"&gt;Python&lt;/a&gt;, die über Teilbäume iteriert. Es kombiniert die Speichereffizienz eines Pull-Parsers mit der Einfachheit eines DOM-Parsers.&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/w/index.php?title=VTD-XML&amp;action=edit&amp;redlink=1" class="new" title="VTD-XML (Seite nicht vorhanden)"&gt;VTD-XML&lt;/a&gt;: Beispiel für ein nicht extrahierendes XML-API.&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/MSXML" title="MSXML"&gt;MSXML&lt;/a&gt;: Microsoft XML Core Services, die Microsoft XML Softwarebibliothek für XML-Unterstützung über DOM, SAX, XSLT, XML Schemata und andere zu XML gehörende Technologien&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/w/index.php?title=Pugixml&amp;action=edit&amp;redlink=1" class="new" title="Pugixml (Seite nicht vorhanden)"&gt;Pugixml&lt;/a&gt;: Ein DOM XML-Parser für C++ bei dessen Entwicklung besonders Wert auf effizienten Code gelegt wurde.&lt;/li&gt;&lt;/ul&gt;
+      &lt;p&gt;Zur Erstellung von XML-Dokumenten gibt es spezielle Programme, sogenannte &lt;a href="/wiki/XML-Editor" title="XML-Editor"&gt;XML-Editoren&lt;/a&gt;.
+      Zur Speicherung und Verwaltung von XML-Dokumenten gibt es ebenfalls spezielle Programme, sogenannte &lt;a href="/wiki/XML-Datenbank" title="XML-Datenbank"&gt;XML-Datenbanken&lt;/a&gt;.
+      &lt;/p&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="Transformation_und_Darstellung_von_XML-Dokumenten"&gt;Transformation und Darstellung von XML-Dokumenten&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=17" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Transformation und Darstellung von XML-Dokumenten"&gt;Bearbeiten&lt;/a&gt;&lt; [...]
+      &lt;p&gt;Ein XML-Dokument kann mittels geeigneter Transformationssprachen wie &lt;a href="/wiki/XSL_Transformation" title="XSL Transformation"&gt;XSLT&lt;/a&gt; oder &lt;a href="/wiki/Document_Style_Semantics_and_Specification_Language" title="Document Style Semantics and Specification Language"&gt;DSSSL&lt;/a&gt; in ein anderes Dokument transformiert werden. Oftmals dient die Transformation zur Überführung eines Dokuments aus einer XML-Sprache in eine andere XML-Sprache, beispiels [...]
+      &lt;/p&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="Schemasprachen"&gt;Schemasprachen&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=18" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Schemasprachen"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_L [...]
+      &lt;p&gt;Um die Struktur von XML-Sprachen zu beschreiben, bedient man sich sogenannter &lt;i&gt;&lt;a href="/wiki/Schemasprache_(XML)" title="Schemasprache (XML)"&gt;Schemasprachen&lt;/a&gt;&lt;/i&gt;.
+      &lt;/p&gt;
+      &lt;h3&gt;&lt;span id="XML_Schema.2FXSD"&gt;&lt;/span&gt;&lt;span class="mw-headline" id="XML_Schema/XSD"&gt;XML Schema/XSD&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=19" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: XML Schema/XSD"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt [...]
+      &lt;div class="hauptartikel" role="navigation"&gt;&lt;span class="hauptartikel-pfeil" title="siehe" role="presentation"&gt;→ &lt;/span&gt;&lt;i&gt;&lt;span class="hauptartikel-text"&gt;Hauptartikel&lt;/span&gt;: &lt;a href="/wiki/XML_Schema" title="XML Schema"&gt;XML Schema&lt;/a&gt;&lt;/i&gt;&lt;/div&gt;
+      &lt;p&gt;XML Schema (beziehungsweise XSD für XML-Schema-Definition) ist die moderne Möglichkeit, die Struktur von XML-Dokumenten zu beschreiben.
+      XML Schema bietet auch die Möglichkeit, den Inhalt von Elementen und Attributen zu beschränken, z.&#160;B. auf Zahlen, Datumsangaben oder Texte, z.&#160;B. mittels &lt;a href="/wiki/Regul%C3%A4rer_Ausdruck" title="Regulärer Ausdruck"&gt;regulärer Ausdrücke&lt;/a&gt;.
+      Ein Schema ist selbst ein XML-Dokument, welches erlaubt, komplexere (auch inhaltliche) Zusammenhänge zu beschreiben, als dies mit einer formalen DTD möglich ist.
+      &lt;/p&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="Weitere_Schemasprachen"&gt;Weitere Schemasprachen&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=20" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Weitere Schemasprachen"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?t [...]
+      &lt;p&gt;Weitere &lt;a href="/wiki/Schemasprache" class="mw-redirect" title="Schemasprache"&gt;Schemasprachen&lt;/a&gt; sind &lt;a href="/wiki/Document_Structure_Description" title="Document Structure Description"&gt;Document Structure Description&lt;/a&gt;, &lt;a href="/wiki/RELAX_NG" title="RELAX NG"&gt;RELAX NG&lt;/a&gt; und &lt;a href="/wiki/Schematron" title="Schematron"&gt;Schematron&lt;/a&gt;.
+      &lt;/p&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="XML-Familie"&gt;XML-Familie&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=21" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: XML-Familie"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&a [...]
+      &lt;h3&gt;&lt;span class="mw-headline" id="Infrastruktur"&gt;Infrastruktur&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=22" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Infrastruktur"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Lang [...]
+      &lt;p&gt;Im Zusammenhang mit XML wurden vom &lt;a href="/wiki/World_Wide_Web_Consortium" title="World Wide Web Consortium"&gt;W3-Konsortium&lt;/a&gt; auf Basis von XML viele Sprachen definiert, welche XML-Ausdrücke für häufig benötigte allgemeine Funktionen anbieten wie etwa die Verknüpfung von XML-Dokumenten. Zahlreiche XML-Sprachen nutzen diese Grundbausteine.
+      &lt;/p&gt;
+      &lt;ul&gt;&lt;li&gt;Transformation von XML-Dokumenten: &lt;a href="/wiki/XSL_Transformation" title="XSL Transformation"&gt;XSLT&lt;/a&gt;, &lt;a href="/wiki/Streaming_Transformations_for_XML" title="Streaming Transformations for XML"&gt;STX&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Adressierung von Teilen eines XML-Baumes: &lt;a href="/wiki/XPath" title="XPath"&gt;XPath&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Verknüpfung von XML-Ressourcen: &lt;a href="/wiki/XPointer" title="XPointer"&gt;XPointer&lt;/a&gt;, &lt;a href="/wiki/XLink_(Syntax)" title="XLink (Syntax)"&gt;XLink&lt;/a&gt; und &lt;a href="/wiki/XInclude" title="XInclude"&gt;XInclude&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Selektion von Daten aus einem XML-Datensatz: &lt;a href="/wiki/XQuery" title="XQuery"&gt;XQuery&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Datenmanipulation in einem XML-Datensatz: &lt;a href="/wiki/XUpdate" title="XUpdate"&gt;XUpdate&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Abfassen von elektronischen Formularen: &lt;a href="/wiki/XForms" title="XForms"&gt;XForms&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Definition von XML-Datenstrukturen: &lt;a href="/wiki/XML_Schema" title="XML Schema"&gt;XML Schema&lt;/a&gt; (= XSD, XML Schema Definition Language), &lt;a href="/wiki/Dokumenttypdefinition" title="Dokumenttypdefinition"&gt;DTD&lt;/a&gt; und &lt;a href="/wiki/RELAX_NG" title="RELAX NG"&gt;RELAX NG&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Signatur und Verschlüsselung von XML-Knoten: &lt;a href="/wiki/XML_Signature" title="XML Signature"&gt;XML Signature&lt;/a&gt; und &lt;a href="/wiki/XML-Encryption" title="XML-Encryption"&gt;XML-Encryption&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Aussagen zum formellen Informationsgehalt: &lt;a href="/wiki/XML_Information_Set" title="XML Information Set"&gt;XML Infoset&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Formatierte Darstellung von XML-Daten: &lt;a href="/wiki/XSL-FO" class="mw-redirect" title="XSL-FO"&gt;XSL-FO&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Definition zum Methoden- bzw. Funktionsaufruf durch verteilte Systeme: &lt;a href="/wiki/XML-RPC" title="XML-RPC"&gt;XML-RPC&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;Standardisierte Attribute: &lt;a href="/wiki/XML_Base" title="XML Base"&gt;XML Base&lt;/a&gt; und ID (DTD)&lt;/li&gt;
+      &lt;li&gt;XML-basierte deklarative Programmiersprache: &lt;a href="/w/index.php?title=MXML&amp;action=edit&amp;redlink=1" class="new" title="MXML (Seite nicht vorhanden)"&gt;MXML&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
+      &lt;h3&gt;&lt;span class="mw-headline" id="Sprachen"&gt;Sprachen&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=23" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Sprachen"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action [...]
+      &lt;p&gt;Heute bedienen sich viele &lt;a href="/wiki/Formale_Sprache" title="Formale Sprache"&gt;formale Sprachen&lt;/a&gt; der Syntax von XML. So ist XML ein wesentliches Instrument, um –&#160;wie es das W3C vorsieht&#160;– eine offene, für Mensch und Maschine verständliche Informationslandschaft (&lt;a href="/wiki/Semantic_Web" title="Semantic Web"&gt;semantic Web&lt;/a&gt;) zu schaffen.
+      &lt;/p&gt;&lt;p&gt;Auch die bekannte Dokumentsprache &lt;a href="/wiki/Hypertext_Markup_Language" title="Hypertext Markup Language"&gt;HTML&lt;/a&gt; wurde als „Extensible HyperText Markup Language“ (&lt;a href="/wiki/Extensible_Hypertext_Markup_Language" title="Extensible Hypertext Markup Language"&gt;XHTML&lt;/a&gt;) im Anschluss an die Version 4.01 in dieses Konzept integriert, so dass ihr nun XML als Definitionsbasis zu Grunde liegt. Vielfacher Grund für den Einsatz von XML ist [...]
+      &lt;/p&gt;&lt;p&gt;Die folgenden Listen stellen einige dieser XML-Sprachen dar.
+      &lt;/p&gt;
+      &lt;h4&gt;&lt;span class="mw-headline" id="Text"&gt;Text&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=24" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Text"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action=edit&amp;se [...]
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/XSL-FO" class="mw-redirect" title="XSL-FO"&gt;XSL-FO&lt;/a&gt; (Textformatierung)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/DocBook" title="DocBook"&gt;DocBook&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Darwin_Information_Typing_Architecture" title="Darwin Information Typing Architecture"&gt;DITA&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Extensible_Hypertext_Markup_Language" title="Extensible Hypertext Markup Language"&gt;XHTML&lt;/a&gt; (XML-konformes HTML)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Text_Encoding_Initiative" title="Text Encoding Initiative"&gt;TEI&lt;/a&gt; (Text Encoding Initiative)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/NITF_(XML)" title="NITF (XML)"&gt;NITF&lt;/a&gt; (News Industry Text Format)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/OPML" class="mw-redirect" title="OPML"&gt;OPML&lt;/a&gt; (Outline Processor Markup Language)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/OSIS" title="OSIS"&gt;OSIS&lt;/a&gt; (Open Scripture Information Standard)&lt;/li&gt;&lt;/ul&gt;
+      &lt;h4&gt;&lt;span class="mw-headline" id="Grafik"&gt;Grafik&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=25" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Grafik"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action=edit& [...]
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/Scalable_Vector_Graphics" title="Scalable Vector Graphics"&gt;SVG&lt;/a&gt; (Vektorgrafiken)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/X3D" title="X3D"&gt;X3D&lt;/a&gt; (3D-Modellierungssprache)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Collaborative_Design_Activity" class="mw-redirect" title="Collaborative Design Activity"&gt;Collada&lt;/a&gt; (Austauschformat für Daten zwischen verschiedenen 3D-Programmen)&lt;/li&gt;&lt;/ul&gt;
+      &lt;h4&gt;&lt;span class="mw-headline" id="Geodaten"&gt;Geodaten&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=26" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Geodaten"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action [...]
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/Geography_Markup_Language" title="Geography Markup Language"&gt;Geography Markup Language&lt;/a&gt; (GML)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/GPS_Exchange_Format" title="GPS Exchange Format"&gt;GPS Exchange Format&lt;/a&gt; (GPX): XML für &lt;a href="/wiki/Global_Positioning_System" title="Global Positioning System"&gt;GPS&lt;/a&gt;-Daten&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Keyhole_Markup_Language" title="Keyhole Markup Language"&gt;Keyhole Markup Language&lt;/a&gt; (KML): Koordinaten-Spezifikation für Google Earth&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/CityGML" class="mw-redirect" title="CityGML"&gt;City Geography Markup Language&lt;/a&gt; (CityGML)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/OpenStreetMap" title="OpenStreetMap"&gt;OpenStreetMap&lt;/a&gt; (OSM)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Normbasierte_Austauschschnittstelle" title="Normbasierte Austauschschnittstelle"&gt;Normbasierte Austauschschnittstelle&lt;/a&gt; (NAS)&lt;/li&gt;&lt;/ul&gt;
+      &lt;h4&gt;&lt;span class="mw-headline" id="Multimedia"&gt;Multimedia&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=27" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Multimedia"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp; [...]
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/Music_Encoding_Initiative" title="Music Encoding Initiative"&gt;MEI&lt;/a&gt; (Music Encoding Initiative)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/MusicXML" title="MusicXML"&gt;MusicXML&lt;/a&gt; (Notendaten, aufgeschriebene Musik)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/Synchronized_Multimedia_Integration_Language" title="Synchronized Multimedia Integration Language"&gt;SMIL&lt;/a&gt; (zeitsynchronisierte, multimediale Inhalte)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/MPEG-7" title="MPEG-7"&gt;MPEG-7&lt;/a&gt; (MPEG-7 Metadaten)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/OpenLaszlo" title="OpenLaszlo"&gt;Laszlo&lt;/a&gt; (LZX)&lt;/li&gt;&lt;/ul&gt;
+      &lt;h4&gt;&lt;span class="mw-headline" id="Sicherheit"&gt;&lt;a href="/wiki/Computersicherheit" class="mw-redirect" title="Computersicherheit"&gt;Sicherheit&lt;/a&gt;&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=28" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Sicherheit"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-edit [...]
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/Security_Assertion_Markup_Language" title="Security Assertion Markup Language"&gt;Security Assertion Markup Language&lt;/a&gt; (sicherheitsbezogene Informationen beschreiben und übertragen)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/XML_Signature" title="XML Signature"&gt;XML Signature&lt;/a&gt; (XML-Schreibweise für &lt;a href="/wiki/Digitale_Signatur" title="Digitale Signatur"&gt;digitale Signaturen&lt;/a&gt;)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/XML-Encryption" title="XML-Encryption"&gt;XML-Encryption&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
+      &lt;h4&gt;&lt;span class="mw-headline" id="Ingenieurwissenschaften"&gt;Ingenieurwissenschaften&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=29" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Ingenieurwissenschaften"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.ph [...]
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/AutomationML" title="AutomationML"&gt;AutomationML&lt;/a&gt;, ein Format zur Speicherung von Anlagenplanungsdaten&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/CAEX" title="CAEX"&gt;CAEX&lt;/a&gt;, ein Format zur Speicherung hierarchischer Objektinformationen&lt;/li&gt;
+      &lt;li&gt;GSDML, ein Format zur Beschreibung von Automatisierungsgeräten, die mit &lt;a href="/wiki/Profinet#Engineering" title="Profinet"&gt;Profinet&lt;/a&gt; kommunizieren können&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/IODD" title="IODD"&gt;IODD&lt;/a&gt;, ein Format zur Beschreibung von Sensoren und Aktoren&lt;/li&gt;
+      &lt;li&gt;PLMXML, ein Format zur Beschreibung von Produktdaten als Teil der &lt;a href="/wiki/Siemens_PLM_Software" title="Siemens PLM Software"&gt;Siemens PLM Software&lt;/a&gt;&lt;sup id="cite_ref-4" class="reference"&gt;&lt;a href="#cite_note-4"&gt;&#91;4&#93;&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
+      &lt;li&gt;LandXML, ein Format zur Speicherung georeferenzierter Objekte&lt;/li&gt;
+      &lt;li&gt;RTML (Remote Telescope Markup Language), ein Format für die Beschreibung astronomischer Beobachtungsanfragen&lt;sup id="cite_ref-5" class="reference"&gt;&lt;a href="#cite_note-5"&gt;&#91;5&#93;&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&lt;/ul&gt;
+      &lt;h4&gt;&lt;span class="mw-headline" id="Weitere"&gt;Weitere&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=30" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Weitere"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action=ed [...]
+      &lt;p&gt;Darüber hinaus existieren XML-Sprachen für &lt;a href="/wiki/Webservice" title="Webservice"&gt;Webservices&lt;/a&gt; (z.&#160;B. &lt;a href="/wiki/SOAP" title="SOAP"&gt;SOAP&lt;/a&gt;, &lt;a href="/wiki/Web_Services_Description_Language" title="Web Services Description Language"&gt;WSDL&lt;/a&gt; und &lt;a href="/wiki/WS-*" title="WS-*"&gt;WS-*&lt;/a&gt;), für die Einbindung von &lt;a href="/wiki/Java_(Programmiersprache)" title="Java (Programmiersprache)"&gt;Java&lt;/a&gt [...]
+      &lt;/p&gt;&lt;p&gt;Eine Zusammenfassung von XML-Sprachen für &lt;a href="/wiki/Office-Paket" title="Office-Paket"&gt;Office-Anwendungen&lt;/a&gt; findet sich im &lt;a href="/wiki/OpenDocument" title="OpenDocument"&gt;OpenDocument&lt;/a&gt;-Austauschformat (&lt;i&gt;&lt;a href="/wiki/Organization_for_the_Advancement_of_Structured_Information_Standards" title="Organization for the Advancement of Structured Information Standards"&gt;OASIS&lt;/a&gt; Open Document Format for Office Appl [...]
+      &lt;/p&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="Alternative_Formate"&gt;Alternative Formate&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=31" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Alternative Formate"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Exte [...]
+      &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/Lisp" title="Lisp"&gt;S-Expressions&lt;/a&gt; (Lisp-Syntax für Listen)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/JavaScript_Object_Notation" title="JavaScript Object Notation"&gt;JSON&lt;/a&gt; (JavaScript Object Notation)&lt;/li&gt;
+      &lt;li&gt;&lt;a href="/wiki/YAML" title="YAML"&gt;YAML&lt;/a&gt; (YAML Ain't Markup Language)&lt;/li&gt;&lt;/ul&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="Trivia"&gt;Trivia&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=32" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Trivia"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action=edit& [...]
+      &lt;p&gt;&lt;a href="/wiki/Linus_Torvalds" title="Linus Torvalds"&gt;Linus Torvalds&lt;/a&gt; bezeichnete XML als Markup-Sprache als wenig geeignet&lt;sup id="cite_ref-6" class="reference"&gt;&lt;a href="#cite_note-6"&gt;&#91;6&#93;&lt;/a&gt;&lt;/sup&gt; (Kommentar Nr. 19):
+      &lt;/p&gt;
+      &lt;div class="Vorlage_Zitat" style="margin:1em 40px;"&gt;
+      &lt;div style="margin:1em 0;"&gt;&lt;blockquote lang="en" style="margin:0;"&gt;
+      &lt;p&gt;“XML is crap. Really. There are no excuses. XML is nasty to parse for humans, and it’s a disaster to parse even for computers. There’s just no reason for that horrible crap to exist.”
+      &lt;/p&gt;
+      &lt;/blockquote&gt;
+      &lt;/div&gt;&lt;div style="margin:-1em 0 1em 1em;"&gt;– &lt;span class="Person"&gt;Linus Torvalds, 2014&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="Literatur"&gt;Literatur&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=33" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Literatur"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;act [...]
+      &lt;ul&gt;&lt;li&gt;Charles F. Goldfarb, Paul Prescod: &lt;cite style="font-style:italic"&gt;XML Handbuch&lt;/cite&gt;. Markt und Technik, München [u.&#160;a.] 1999, &lt;a href="/wiki/Spezial:ISBN-Suche/3827295750" class="internal mw-magiclink-isbn"&gt;ISBN 3-8272-9575-0&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Charles+F.+Goldfarb%2C+Paul [...]
+      &lt;li&gt;Wiebke Möhr, Ingrid Schmidt: &lt;cite style="font-style:italic"&gt;SGML und XML: Anwendungen und Perspektiven&lt;/cite&gt;. Springer-Verlag, Berlin / Heidelberg / New York [u.&#160;a.] 1999, &lt;a href="/wiki/Spezial:ISBN-Suche/3540655433" class="internal mw-magiclink-isbn"&gt;ISBN 3-540-65543-3&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp [...]
+      &lt;li&gt;Robert Eckstein: &lt;cite style="font-style:italic"&gt;XML – kurz &amp; gut&lt;/cite&gt;. O’Reilly Verlag, Cambridge / Köln [u.&#160;a.] 2000, &lt;a href="/wiki/Spezial:ISBN-Suche/3897212196" class="internal mw-magiclink-isbn"&gt;ISBN 3-89721-219-6&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Robert+Eckstein&amp;rft.btitle=XML+-+kur [...]
+      &lt;li&gt;Henning Lobin: &lt;cite style="font-style:italic"&gt;Informationsmodellierung in XML und SGML&lt;/cite&gt;. Springer, Berlin 2000, &lt;a href="/wiki/Spezial:ISBN-Suche/3540653562" class="internal mw-magiclink-isbn"&gt;ISBN 3-540-65356-2&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Henning+Lobin&amp;rft.btitle=Informationsmodellierun [...]
+      &lt;li&gt;Michael Seeboerger-Weichselbaum: &lt;cite style="font-style:italic"&gt;Das Einsteigerseminar XML&lt;/cite&gt;. 2., überarbeitete Auflage. BHV Software, Kaarst 2000, &lt;a href="/wiki/Spezial:ISBN-Suche/3828710182" class="internal mw-magiclink-isbn"&gt;ISBN 3-8287-1018-2&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Michael+Seeboerger [...]
+      &lt;li&gt;Elliotte Rusty Harold: &lt;cite style="font-style:italic"&gt;Die XML Bibel&lt;/cite&gt;. 2. aktualisierte Auflage. mitp, Bonn 2002, &lt;a href="/wiki/Spezial:ISBN-Suche/3826608216" class="internal mw-magiclink-isbn"&gt;ISBN 3-8266-0821-6&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Elliotte+Rusty+Harold&amp;rft.btitle=Die+XML+Bibel& [...]
+      &lt;li&gt;Stefan Mintert: &lt;cite style="font-style:italic"&gt;XML &amp; Co. Die W3C-Spezifikationen für Dokumenten- und Datenarchitektur&lt;/cite&gt;. Addison-Wesley, München 2002, &lt;a href="/wiki/Spezial:ISBN-Suche/3827318440" class="internal mw-magiclink-isbn"&gt;ISBN 3-8273-1844-0&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Stefan+Min [...]
+      &lt;li&gt;Christine Kränzler: &lt;cite style="font-style:italic"&gt;XML/XSL – … für professionelle Einsteiger. für Buch und Web&lt;/cite&gt;. Markt+Technik, München 2002, &lt;a href="/wiki/Spezial:ISBN-Suche/3827263395" class="internal mw-magiclink-isbn"&gt;ISBN 3-8272-6339-5&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Christine+Kr%C3%A4nzle [...]
+      &lt;li&gt;Frank Bitzer: &lt;cite style="font-style:italic"&gt;XML im Unternehmen. Briefing fürs IT-Management&lt;/cite&gt;. Galileo Press, Bonn 2002, &lt;a href="/wiki/Spezial:ISBN-Suche/3898422887" class="internal mw-magiclink-isbn"&gt;ISBN 3-89842-288-7&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Frank+Bitzer&amp;rft.btitle=XML+im+Unterneh [...]
+      &lt;li&gt;Erik T. Ray: &lt;cite style="font-style:italic"&gt;Einführung in XML&lt;/cite&gt;. O’Reilly, 2004, &lt;a href="/wiki/Spezial:ISBN-Suche/3897212862" class="internal mw-magiclink-isbn"&gt;ISBN 3-89721-286-2&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Erik+T.+Ray&amp;rft.btitle=Einf%C3%BChrung+in+XML&amp;rft.date=2004&amp;rft.genre=bo [...]
+      &lt;li&gt;Margit Becher: &lt;cite style="font-style:italic"&gt;XML&#160;: DTD, XML-Schema, XPath, XQuery, XSLT, XSL-FO, SAX, DOM&lt;/cite&gt;. W3L Verlag, Witten 2009, &lt;a href="/wiki/Spezial:ISBN-Suche/9783937137698" class="internal mw-magiclink-isbn"&gt;ISBN 978-3-937137-69-8&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Margit+Becher&amp; [...]
+      &lt;li&gt;Marco Skulschus, Marcus Wiederstein: &lt;cite style="font-style:italic"&gt;XML: Standards und Technologien&lt;/cite&gt;. Comelio Medien, Berlin 2009, &lt;a href="/wiki/Spezial:ISBN-Suche/9783939701217" class="internal mw-magiclink-isbn"&gt;ISBN 978-3-939701-21-7&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Marco+Skulschus%2C+Marcus+ [...]
+      &lt;li&gt;Helmut Vonhoegen: &lt;cite style="font-style:italic"&gt;Einstieg in XML. Aktuelle Standards: XML Schema, XSL, XLink&lt;/cite&gt;. 8. Auflage. Rheinwerk, 2015, &lt;a href="/wiki/Spezial:ISBN-Suche/9783836237987" class="internal mw-magiclink-isbn"&gt;ISBN 978-3-8362-3798-7&lt;/a&gt;.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Extensible+Markup+Language&amp;rft.au=Helmut+Vonhoegen& [...]
+      &lt;h2&gt;&lt;span class="mw-headline" id="Weblinks"&gt;Weblinks&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=34" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Weblinks"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;action [...]
+      &lt;div class="sisterproject" style="margin:0.1em 0 0 0;"&gt;&lt;img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/12px-Commons-logo.svg.png" decoding="async" title="Commons" width="12" height="16" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/18px-Commons-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/24px-Commons-logo.svg.png 2x" data-file-width="1024" data-file-height="1376 [...]
+      &lt;div class="sisterproject" style="margin:0.1em 0 0 0;"&gt;&lt;span class="noviewer" role="presentation"&gt;&lt;img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/16px-Wikibooks-logo.svg.png" decoding="async" title="Wikibooks" width="16" height="16" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/24px-Wikibooks-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/32px-Wikibooks [...]
+      &lt;ul&gt;&lt;li&gt;&lt;a rel="nofollow" class="external text" href="http://www.w3.org/XML"&gt;World Wide Web Consortium über XML&lt;/a&gt; (englisch),&lt;br /&gt;&lt;a rel="nofollow" class="external text" href="http://www.edition-w3c.de/"&gt;edition-w3c.de – Deutsche Übersetzungen zu XML u.&#160;a.&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;&lt;a rel="nofollow" class="external text" href="https://www.homepage-webhilfe.de/XML/"&gt;Ausführliche Erklärung zu XML und Tutorials zu diversen XML-Sprachen&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;&lt;a rel="nofollow" class="external text" href="https://curlie.org/World/Deutsch/Computer/Datenformate/Markup_Languages/XML/"&gt;Linkkatalog zum Thema XML&lt;/a&gt; bei &lt;i&gt;curlie.org&lt;/i&gt; (ehemals &lt;a href="/wiki/DMOZ" title="DMOZ"&gt;DMOZ&lt;/a&gt;)&lt;/li&gt;
+      &lt;li&gt;&lt;a rel="nofollow" class="external text" href="http://www.data2type.de/xml-xslt-xslfo/"&gt;Infos zu diversen XML-Technologien wie XSLT, XPath, Schematron, XProc, WordML, XSL-FO&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;&lt;a rel="nofollow" class="external text" href="https://jsonformatter.org/xml-parser"&gt;XML-Parser&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
+      &lt;h2&gt;&lt;span class="mw-headline" id="Einzelnachweise"&gt;Einzelnachweise&lt;/span&gt;&lt;span class="mw-editsection"&gt;&lt;span class="mw-editsection-bracket"&gt;[&lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit&amp;section=35" class="mw-editsection-visualeditor" title="Abschnitt bearbeiten: Einzelnachweise"&gt;Bearbeiten&lt;/a&gt;&lt;span class="mw-editsection-divider"&gt; | &lt;/span&gt;&lt;a href="/w/index.php?title=Extensible_Marku [...]
+      &lt;ol class="references"&gt;
+      &lt;li id="cite_note-1"&gt;&lt;span class="mw-cite-backlink"&gt;&lt;a href="#cite_ref-1"&gt;↑&lt;/a&gt;&lt;/span&gt; &lt;span class="reference-text"&gt;&lt;span class="cite"&gt;&lt;a rel="nofollow" class="external text" href="https://web.archive.org/web/20060615212726/http://www.w3.org/TR/1998/REC-xml-19980210"&gt;&lt;i&gt;Extensible Markup Language (XML) 1.0.&lt;/i&gt;&lt;/a&gt;&#32;w3.org,&#32;10.&#160;Februar 1998,&#32;archiviert&#32;vom&#32;&lt;span class="external text"&gt;&lt [...]
+      &lt;/li&gt;
+      &lt;li id="cite_note-2"&gt;&lt;span class="mw-cite-backlink"&gt;&lt;a href="#cite_ref-2"&gt;↑&lt;/a&gt;&lt;/span&gt; &lt;span class="reference-text"&gt;&lt;span class="cite"&gt;&lt;a rel="nofollow" class="external text" href="https://www.w3.org/TR/REC-xml/"&gt;&lt;i&gt;Extensible Markup Language (XML) 1.0 (Fifth Edition).&lt;/i&gt;&lt;/a&gt;&#32;w3.org,&#32;26.&#160;November 2008&#44;&lt;span class="Abrufdatum"&gt;&#32;abgerufen am 12.&#160;Februar 2017&lt;/span&gt;&#32;(englisch). [...]
+      &lt;/li&gt;
+      &lt;li id="cite_note-3"&gt;&lt;span class="mw-cite-backlink"&gt;&lt;a href="#cite_ref-3"&gt;↑&lt;/a&gt;&lt;/span&gt; &lt;span class="reference-text"&gt;&lt;span class="cite"&gt;&lt;a rel="nofollow" class="external text" href="https://www.w3.org/TR/xml/#charsets"&gt;&lt;i&gt;Characters.&lt;/i&gt;&lt;/a&gt;&#32;In:&#32;&lt;i&gt;Extensible Markup Language (XML) 1.0 (Fifth Edition).&lt;/i&gt;&#32;26.&#160;November 2008&#44;&lt;span class="Abrufdatum"&gt;&#32;abgerufen am 9.&#160;März 2 [...]
+      &lt;/li&gt;
+      &lt;li id="cite_note-4"&gt;&lt;span class="mw-cite-backlink"&gt;&lt;a href="#cite_ref-4"&gt;↑&lt;/a&gt;&lt;/span&gt; &lt;span class="reference-text"&gt;&lt;a rel="nofollow" class="external text" href="http://www.plm.automation.siemens.com/de_de/products/open/plmxml/"&gt;plm.automation.siemens.com&lt;/a&gt;&lt;/span&gt;
+      &lt;/li&gt;
+      &lt;li id="cite_note-5"&gt;&lt;span class="mw-cite-backlink"&gt;&lt;a href="#cite_ref-5"&gt;↑&lt;/a&gt;&lt;/span&gt; &lt;span class="reference-text"&gt;Remote Telescope Markup Language (RTML), &lt;a href="/wiki/Bibcode" title="Bibcode"&gt;bibcode&lt;/a&gt;:&lt;a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2006AN....327..751H"&gt;2006AN....327..751H&lt;/a&gt;&lt;/span&gt;
+      &lt;/li&gt;
+      &lt;li id="cite_note-6"&gt;&lt;span class="mw-cite-backlink"&gt;&lt;a href="#cite_ref-6"&gt;↑&lt;/a&gt;&lt;/span&gt; &lt;span class="reference-text"&gt;&lt;cite style="font-style:italic"&gt;Kommentar in Diskussion um XML als Markup-Sprache (06.03.2014)&lt;/cite&gt;. (&lt;a rel="nofollow" class="external text" href="https://plus.google.com/+LinusTorvalds/posts/X2XVf9Q7MfV"&gt;plus.google.com&lt;/a&gt; &#91;abgerufen am 10.&#160;April 2017&#93;).&lt;span class="Z3988" title="ctx_ver= [...]
+      &lt;/li&gt;
+      &lt;/ol&gt;
+      &lt;div id="normdaten" class="catlinks normdaten-typ-s"&gt;Normdaten&#160;(Sachbegriff): &lt;a href="/wiki/Gemeinsame_Normdatei" title="Gemeinsame Normdatei"&gt;GND&lt;/a&gt;: &lt;span class="plainlinks-print"&gt;&lt;a rel="nofollow" class="external text" href="https://d-nb.info/gnd/4501553-3"&gt;4501553-3&lt;/a&gt;&lt;/span&gt; &lt;span class="metadata noprint"&gt;(&lt;a rel="nofollow" class="external text" href="http://swb.bsz-bw.de/DB=2.104/SET=1/TTL=1/CMD?retrace=0&amp;trm_old= [...]
+      &lt;style data-mw-deduplicate="TemplateStyles:r181878932"&gt;.mw-parser-output div.NavFrame{border:1px solid #A2A9B1;clear:both;font-size:95%;margin-top:1.5em;min-height:0;padding:2px;text-align:center}.mw-parser-output div.NavPic{float:left;padding:2px}.mw-parser-output div.NavHead{background-color:#EAECF0;font-weight:bold}.mw-parser-output div.NavFrame:after{clear:both;content:"";display:block}.mw-parser-output div.NavFrame+div.NavFrame,.mw-parser-output div.NavFrame+link+div.Nav [...]
+      &lt;table class="wikitable zebra" style="width:100%;margin:0;text-align:left;font-size:95%;margin-top:.1em;margin-bottom:.0em;"&gt;
+
+
+
+      &lt;tbody&gt;&lt;tr style="display:none"&gt;
+      &lt;td&gt;
+      &lt;/td&gt;
+      &lt;td&gt;
+      &lt;/td&gt;
+      &lt;td&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;text-align: right;background: #DDE5EE;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"&gt;&lt;b&gt;Empfehlungen&lt;/b&gt;
+      &lt;/td&gt;
+      &lt;td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;"&gt;
+      &lt;p&gt;&lt;a href="/w/index.php?title=ActivityPub&amp;action=edit&amp;redlink=1" class="new" title="ActivityPub (Seite nicht vorhanden)"&gt;ActivityPub&lt;/a&gt; • &lt;a href="/wiki/Accessible_Rich_Internet_Applications" title="Accessible Rich Internet Applications"&gt;ARIA&lt;/a&gt; • &lt;a href="/wiki/Canonical_XML" title="Canonical XML"&gt;Canonical XML&lt;/a&gt; • &lt;a href="/wiki/Compound_Document_Formats" title="Compound Document Formats"&gt; CDF&lt;/a&gt; • &lt;a href="/w [...]
+      &lt;/p&gt;
+      &lt;/td&gt;
+      &lt;td style="width:0; padding:0 2px 0 0; border:1px solid transparent; background: transparent;" rowspan="5"&gt;&lt;div class="noviewer"&gt;&lt;a href="/wiki/Datei:W3C%C2%AE_Icon.svg" class="image" title="Logo des World Wide Web Consortiums"&gt;&lt;img alt="Logo des World Wide Web Consortiums" src="//upload.wikimedia.org/wikipedia/commons/thumb/e/ed/W3C%C2%AE_Icon.svg/112px-W3C%C2%AE_Icon.svg.png" decoding="async" width="112" height="76" srcset="//upload.wikimedia.org/wikipedia/co [...]
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;text-align: right;background: #DDE5EE;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"&gt;&lt;b&gt;Arbeitsentwürfe&lt;br /&gt;und Kandidaten&lt;/b&gt;
+      &lt;/td&gt;
+      &lt;td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;"&gt;
+      &lt;p&gt;&lt;a href="/wiki/CCXML" title="CCXML"&gt;CCXML&lt;/a&gt; • &lt;a href="/wiki/CURIE" title="CURIE"&gt;CURIE&lt;/a&gt; • &lt;a href="/wiki/SMIL_Timesheets" title="SMIL Timesheets"&gt;SMIL Timesheets&lt;/a&gt; • &lt;a href="/wiki/SXBL" title="SXBL"&gt;sXBL&lt;/a&gt; • &lt;a href="/w/index.php?title=Web_Integration_Compound_Document&amp;action=edit&amp;redlink=1" class="new" title="Web Integration Compound Document (Seite nicht vorhanden)"&gt; WICD&lt;/a&gt; • &lt;a href="/wi [...]
+      &lt;/p&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;text-align: right;background: #DDE5EE;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"&gt;&lt;b&gt;Anmerkungen&lt;/b&gt;
+      &lt;/td&gt;
+      &lt;td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;"&gt;
+      &lt;p&gt;&lt;a href="/wiki/XAdES" title="XAdES"&gt;XAdES&lt;/a&gt; • &lt;a href="/wiki/Extensible_Forms_Description_Language" title="Extensible Forms Description Language"&gt; XFDL&lt;/a&gt; • &lt;a href="/wiki/XHTML%2BSMIL" title="XHTML+SMIL"&gt;XHTML+SMIL&lt;/a&gt; • &lt;a href="/wiki/Extensible_User_Interface_Protocol" title="Extensible User Interface Protocol"&gt; XUP&lt;/a&gt;
+      &lt;/p&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;text-align: right;background: #DDE5EE;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"&gt;&lt;b&gt;Richtlinien&lt;/b&gt;
+      &lt;/td&gt;
+      &lt;td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;"&gt;
+      &lt;p&gt;&lt;a href="/wiki/Web_Content_Accessibility_Guidelines" title="Web Content Accessibility Guidelines"&gt;Web Content Accessibility Guidelines&lt;/a&gt; • &lt;a href="/w/index.php?title=W3C_MMI&amp;action=edit&amp;redlink=1" class="new" title="W3C MMI (Seite nicht vorhanden)"&gt; Multimodal Interaction Activity&lt;/a&gt; • &lt;a href="/wiki/W3C_Markup_Validation_Service" title="W3C Markup Validation Service"&gt; Markup Validation Service&lt;/a&gt;
+      &lt;/p&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;tr&gt;
+      &lt;td style="white-space: nowrap;text-align: right;background: #DDE5EE;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"&gt;&lt;b&gt;Initiativen&lt;/b&gt;
+      &lt;/td&gt;
+      &lt;td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;"&gt;
+      &lt;p&gt;&lt;a href="/wiki/Web_Accessibility_Initiative" title="Web Accessibility Initiative"&gt;Web Accessibility Initiative&lt;/a&gt;
+      &lt;/p&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+      &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;
+      &lt;!--
+      NewPP limit report
+      Parsed by mw1268
+      Cached time: 20190701160511
+      Cache expiry: 2592000
+      Dynamic content: false
+      Complications: []
+      CPU time usage: 0.468 seconds
+      Real time usage: 0.611 seconds
+      Preprocessor visited node count: 3333/1000000
+      Preprocessor generated node count: 0/1500000
+      Post‐expand include size: 52620/2097152 bytes
+      Template argument size: 17707/2097152 bytes
+      Highest expansion depth: 14/40
+      Expensive parser function count: 3/500
+      Unstrip recursion depth: 0/20
+      Unstrip post‐expand size: 6697/5000000 bytes
+      Number of Wikibase entities loaded: 1/400
+      Lua time usage: 0.182/10.000 seconds
+      Lua memory usage: 5.97 MB/50 MB
+      --&gt;
+      &lt;!--
+      Transclusion expansion time report (%,ms,calls,template)
+      100.00%  501.524      1 -total
+      29.70%  148.973      3 Vorlage:Internetquelle
+      20.55%  103.070     14 Vorlage:Literatur
+      14.53%   72.888      1 Vorlage:Navigationsleiste_W3C-Standards
+      13.62%   68.302      1 Vorlage:Erweiterte_Navigationsleiste
+      11.24%   56.351      2 Vorlage:Wikidata-Registrierung
+      11.22%   56.247      1 Vorlage:Commonscat
+      5.21%   26.120      2 Vorlage:FormatDate
+      4.98%   24.977      1 Vorlage:Infobox_Dateiformat
+      4.32%   21.652      1 Vorlage:NavFrame
+      --&gt;
+
+      &lt;!-- Saved in parser cache with key dewiki:stable-pcache:idhash:5730-0!canonical and timestamp 20190701160511 and revision id 190034957
+      --&gt;
+      &lt;/div&gt;&lt;noscript&gt;&lt;img src="//de.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;" /&gt;&lt;/noscript&gt;&lt;/div&gt;
+
+      &lt;div class="printfooter"&gt;Abgerufen von „&lt;a dir="ltr" href="https://de.wikipedia.org/w/index.php?title=Extensible_Markup_Language&amp;oldid=190034957"&gt;https://de.wikipedia.org/w/index.php?title=Extensible_Markup_Language&amp;oldid=190034957&lt;/a&gt;“&lt;/div&gt;
+
+      &lt;div id="catlinks" class="catlinks" data-mw="interface"&gt;&lt;div id="mw-normal-catlinks" class="mw-normal-catlinks"&gt;&lt;a href="/wiki/Wikipedia:Kategorien" title="Wikipedia:Kategorien"&gt;Kategorien&lt;/a&gt;: &lt;ul&gt;&lt;li&gt;&lt;a href="/wiki/Kategorie:XML" title="Kategorie:XML"&gt;XML&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/wiki/Kategorie:Standard_f%C3%BCr_Elektronischen_Datenaustausch" title="Kategorie:Standard für Elektronischen Datenaustausch"&gt;Standard für El [...]
+      &lt;div class="visualClear"&gt;&lt;/div&gt;
+
+      &lt;/div&gt;
+      &lt;/div&gt;
+
+
+      &lt;div id="mw-navigation"&gt;
+      &lt;h2&gt;Navigationsmenü&lt;/h2&gt;
+      &lt;div id="mw-head"&gt;
+      &lt;div id="p-personal" role="navigation" aria-labelledby="p-personal-label"&gt;
+      &lt;h3 id="p-personal-label"&gt;Meine Werkzeuge&lt;/h3&gt;
+      &lt;ul&gt;
+      &lt;li id="pt-anonuserpage"&gt;Nicht angemeldet&lt;/li&gt;&lt;li id="pt-anontalk"&gt;&lt;a href="/wiki/Spezial:Meine_Diskussionsseite" title="Diskussion über Änderungen von dieser IP-Adresse [n]" accesskey="n"&gt;Diskussionsseite&lt;/a&gt;&lt;/li&gt;&lt;li id="pt-anoncontribs"&gt;&lt;a href="/wiki/Spezial:Meine_Beitr%C3%A4ge" title="Eine Liste der Bearbeitungen, die von dieser IP-Adresse gemacht wurden [y]" accesskey="y"&gt;Beiträge&lt;/a&gt;&lt;/li&gt;&lt;li id="pt-createaccount"& [...]
+      &lt;/div&gt;
+      &lt;div id="left-navigation"&gt;
+      &lt;div id="p-namespaces" role="navigation" class="vectorTabs" aria-labelledby="p-namespaces-label"&gt;
+      &lt;h3 id="p-namespaces-label"&gt;Namensräume&lt;/h3&gt;
+      &lt;ul&gt;
+      &lt;li id="ca-nstab-main" class="selected"&gt;&lt;span&gt;&lt;a href="/wiki/Extensible_Markup_Language" title="Seiteninhalt anzeigen [c]" accesskey="c"&gt;Artikel&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li id="ca-talk"&gt;&lt;span&gt;&lt;a href="/wiki/Diskussion:Extensible_Markup_Language" rel="discussion" title="Diskussion zum Seiteninhalt [t]" accesskey="t"&gt;Diskussion&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;						&lt;/ul&gt;
+      &lt;/div&gt;
+      &lt;div id="p-variants" role="navigation" class="vectorMenu emptyPortlet" aria-labelledby="p-variants-label"&gt;
+      &lt;input type="checkbox" class="vectorMenuCheckbox" aria-labelledby="p-variants-label" /&gt;
+      &lt;h3 id="p-variants-label"&gt;
+      &lt;span&gt;Varianten&lt;/span&gt;
+      &lt;/h3&gt;
+      &lt;ul class="menu"&gt;
+      &lt;/ul&gt;
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;div id="right-navigation"&gt;
+      &lt;div id="p-views" role="navigation" class="vectorTabs" aria-labelledby="p-views-label"&gt;
+      &lt;h3 id="p-views-label"&gt;Ansichten&lt;/h3&gt;
+      &lt;ul&gt;
+      &lt;li id="ca-view" class="collapsible selected"&gt;&lt;span&gt;&lt;a href="/wiki/Extensible_Markup_Language"&gt;Lesen&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li id="ca-ve-edit" class="collapsible"&gt;&lt;span&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;veaction=edit" title="Diese Seite mit dem VisualEditor bearbeiten [v]" accesskey="v"&gt;Bearbeiten&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li id="ca-edit" class="collapsible"&gt;&lt;span&gt;&lt;a href="/w/index.php?ti [...]
+      &lt;/div&gt;
+      &lt;div id="p-cactions" role="navigation" class="vectorMenu emptyPortlet" aria-labelledby="p-cactions-label"&gt;
+      &lt;input type="checkbox" class="vectorMenuCheckbox" aria-labelledby="p-cactions-label" /&gt;
+      &lt;h3 id="p-cactions-label"&gt;&lt;span&gt;Mehr&lt;/span&gt;&lt;/h3&gt;
+      &lt;ul class="menu"&gt;
+      &lt;/ul&gt;
+      &lt;/div&gt;
+      &lt;div id="p-search" role="search"&gt;
+      &lt;h3&gt;
+      &lt;label for="searchInput"&gt;Suche&lt;/label&gt;
+      &lt;/h3&gt;
+      &lt;form action="/w/index.php" id="searchform"&gt;
+      &lt;div id="simpleSearch"&gt;
+      &lt;input type="search" name="search" placeholder="Wikipedia durchsuchen" title="Durchsuche die Wikipedia [f]" accesskey="f" id="searchInput"/&gt;&lt;input type="hidden" value="Spezial:Suche" name="title"/&gt;&lt;input type="submit" name="fulltext" value="Suchen" title="Suche nach Seiten, die diesen Text enthalten" id="mw-searchButton" class="searchButton mw-fallbackSearchButton"/&gt;&lt;input type="submit" name="go" value="Artikel" title="Gehe direkt zu der Seite mit genau diesem  [...]
+      &lt;/form&gt;
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;div id="mw-panel"&gt;
+      &lt;div id="p-logo" role="banner"&gt;&lt;a class="mw-wiki-logo" href="/wiki/Wikipedia:Hauptseite" title="Hauptseite"&gt;&lt;/a&gt;&lt;/div&gt;
+      &lt;div class="portal" role="navigation" id="p-navigation" aria-labelledby="p-navigation-label"&gt;
+      &lt;h3 id="p-navigation-label"&gt;Navigation&lt;/h3&gt;
+      &lt;div class="body"&gt;
+      &lt;ul&gt;
+      &lt;li id="n-mainpage-description"&gt;&lt;a href="/wiki/Wikipedia:Hauptseite" title="Hauptseite besuchen [z]" accesskey="z"&gt;Hauptseite&lt;/a&gt;&lt;/li&gt;&lt;li id="n-topics"&gt;&lt;a href="/wiki/Portal:Wikipedia_nach_Themen"&gt;Themenportale&lt;/a&gt;&lt;/li&gt;&lt;li id="n-randompage"&gt;&lt;a href="/wiki/Spezial:Zuf%C3%A4llige_Seite" title="Zufällige Seite aufrufen [x]" accesskey="x"&gt;Zufälliger Artikel&lt;/a&gt;&lt;/li&gt;				&lt;/ul&gt;
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;div class="portal" role="navigation" id="p-Mitmachen" aria-labelledby="p-Mitmachen-label"&gt;
+      &lt;h3 id="p-Mitmachen-label"&gt;Mitmachen&lt;/h3&gt;
+      &lt;div class="body"&gt;
+      &lt;ul&gt;
+      &lt;li id="n-Artikel-verbessern"&gt;&lt;a href="/wiki/Wikipedia:Beteiligen"&gt;Artikel verbessern&lt;/a&gt;&lt;/li&gt;&lt;li id="n-Neuerartikel"&gt;&lt;a href="/wiki/Hilfe:Neuen_Artikel_anlegen"&gt;Neuen Artikel anlegen&lt;/a&gt;&lt;/li&gt;&lt;li id="n-portal"&gt;&lt;a href="/wiki/Wikipedia:Autorenportal" title="Info-Zentrum über Beteiligungsmöglichkeiten"&gt;Autorenportal&lt;/a&gt;&lt;/li&gt;&lt;li id="n-help"&gt;&lt;a href="/wiki/Hilfe:%C3%9Cbersicht" title="Hilfeseite anzeigen"& [...]
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;div class="portal" role="navigation" id="p-tb" aria-labelledby="p-tb-label"&gt;
+      &lt;h3 id="p-tb-label"&gt;Werkzeuge&lt;/h3&gt;
+      &lt;div class="body"&gt;
+      &lt;ul&gt;
+      &lt;li id="t-whatlinkshere"&gt;&lt;a href="/wiki/Spezial:Linkliste/Extensible_Markup_Language" title="Liste aller Seiten, die hierher verlinken [j]" accesskey="j"&gt;Links auf diese Seite&lt;/a&gt;&lt;/li&gt;&lt;li id="t-recentchangeslinked"&gt;&lt;a href="/wiki/Spezial:%C3%84nderungen_an_verlinkten_Seiten/Extensible_Markup_Language" rel="nofollow" title="Letzte Änderungen an Seiten, die von hier verlinkt sind [k]" accesskey="k"&gt;Änderungen an verlinkten Seiten&lt;/a&gt;&lt;/li&g [...]
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;div class="portal" role="navigation" id="p-wikibase-otherprojects" aria-labelledby="p-wikibase-otherprojects-label"&gt;
+      &lt;h3 id="p-wikibase-otherprojects-label"&gt;In anderen Projekten&lt;/h3&gt;
+      &lt;div class="body"&gt;
+      &lt;ul&gt;
+      &lt;li class="wb-otherproject-link wb-otherproject-commons"&gt;&lt;a href="https://commons.wikimedia.org/wiki/Category:XML" hreflang="en"&gt;Commons&lt;/a&gt;&lt;/li&gt;&lt;li class="wb-otherproject-link wb-otherproject-wikibooks"&gt;&lt;a href="https://de.wikibooks.org/wiki/Websiteentwicklung:_XML" hreflang="de"&gt;Wikibooks&lt;/a&gt;&lt;/li&gt;				&lt;/ul&gt;
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;div class="portal" role="navigation" id="p-coll-print_export" aria-labelledby="p-coll-print_export-label"&gt;
+      &lt;h3 id="p-coll-print_export-label"&gt;Drucken/­exportieren&lt;/h3&gt;
+      &lt;div class="body"&gt;
+      &lt;ul&gt;
+      &lt;li id="coll-create_a_book"&gt;&lt;a href="/w/index.php?title=Spezial:Buch&amp;bookcmd=book_creator&amp;referer=Extensible+Markup+Language"&gt;Buch erstellen&lt;/a&gt;&lt;/li&gt;&lt;li id="coll-download-as-rl"&gt;&lt;a href="/w/index.php?title=Spezial:ElectronPdf&amp;page=Extensible+Markup+Language&amp;action=show-download-screen"&gt;Als PDF herunterladen&lt;/a&gt;&lt;/li&gt;&lt;li id="t-print"&gt;&lt;a href="/w/index.php?title=Extensible_Markup_Language&amp;printable=yes" title [...]
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;div class="portal" role="navigation" id="p-lang" aria-labelledby="p-lang-label"&gt;
+      &lt;h3 id="p-lang-label"&gt;In anderen Sprachen&lt;/h3&gt;
+      &lt;div class="body"&gt;
+      &lt;ul&gt;
+      &lt;li class="interlanguage-link interwiki-af"&gt;&lt;a href="https://af.wikipedia.org/wiki/XML" title="XML – Afrikaans" lang="af" hreflang="af" class="interlanguage-link-target"&gt;Afrikaans&lt;/a&gt;&lt;/li&gt;&lt;li class="interlanguage-link interwiki-ar"&gt;&lt;a href="https://ar.wikipedia.org/wiki/%D9%84%D8%BA%D8%A9_%D8%A7%D9%84%D8%AA%D8%B1%D9%85%D9%8A%D8%B2_%D8%A7%D9%84%D9%82%D8%A7%D8%A8%D9%84%D8%A9_%D9%84%D9%84%D8%A7%D9%85%D8%AA%D8%AF%D8%A7%D8%AF" title="لغة الترميز القابلة  [...]
+      &lt;div class="after-portlet after-portlet-lang"&gt;&lt;span class="wb-langlinks-edit wb-langlinks-link"&gt;&lt;a href="https://www.wikidata.org/wiki/Special:EntityPage/Q2115#sitelinks-wikipedia" title="Links auf Artikel in anderen Sprachen bearbeiten" class="wbc-editpage"&gt;Links bearbeiten&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;			&lt;/div&gt;
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;/div&gt;
+      &lt;div id="footer" role="contentinfo"&gt;
+      &lt;ul id="footer-info"&gt;
+      &lt;li id="footer-info-lastmod"&gt; Diese Seite wurde zuletzt am 1. Juli 2019 um 18:04 Uhr bearbeitet.&lt;/li&gt;
+      &lt;li id="footer-info-copyright"&gt;&lt;div id="footer-info-copyright-stats" class="noprint"&gt;&lt;a class="external" href="https://tools.wmflabs.org/pageviews?pages=Extensible_Markup_Language&amp;project=de.wikipedia.org" rel="nofollow"&gt;Abrufstatistik&lt;/a&gt; · &lt;a class="external" href=" https://xtools.wmflabs.org/articleinfo-authorship/de.wikipedia.org/Extensible_Markup_Language?uselang=de" rel="nofollow"&gt;Autoren&lt;/a&gt; &lt;/div&gt;&lt;div id="footer-info-copyrigh [...]
+      Der Text ist unter der Lizenz &lt;a class="internal" href="https://de.wikipedia.org/wiki/Wikipedia:Lizenzbestimmungen_Commons_Attribution-ShareAlike_3.0_Unported"&gt;„Creative Commons Attribution/Share Alike“&lt;/a&gt; verfügbar; Informationen zu den Urhebern und zum Lizenzstatus eingebundener Mediendateien (etwa Bilder oder Videos) können im Regelfall durch Anklicken dieser abgerufen werden. Möglicherweise unterliegen die Inhalte jeweils zusätzlichen Bedingungen. Durch die Nutzung [...]
+      Wikipedia® ist eine eingetragene Marke der Wikimedia Foundation Inc.&lt;/div&gt;&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;ul id="footer-places"&gt;
+      &lt;li id="footer-places-privacy"&gt;&lt;a href="https://meta.wikimedia.org/wiki/Privacy_policy/de" class="extiw" title="m:Privacy policy/de"&gt;Datenschutz&lt;/a&gt;&lt;/li&gt;
+      &lt;li id="footer-places-about"&gt;&lt;a href="/wiki/Wikipedia:%C3%9Cber_Wikipedia" title="Wikipedia:Über Wikipedia"&gt;Über Wikipedia&lt;/a&gt;&lt;/li&gt;
+      &lt;li id="footer-places-disclaimer"&gt;&lt;a href="/wiki/Wikipedia:Impressum" title="Wikipedia:Impressum"&gt;Impressum&lt;/a&gt;&lt;/li&gt;
+      &lt;li id="footer-places-developers"&gt;&lt;a href="https://www.mediawiki.org/wiki/Special:MyLanguage/How_to_contribute"&gt;Entwickler&lt;/a&gt;&lt;/li&gt;
+      &lt;li id="footer-places-cookiestatement"&gt;&lt;a href="https://foundation.wikimedia.org/wiki/Cookie_statement"&gt;Stellungnahme zu Cookies&lt;/a&gt;&lt;/li&gt;
+      &lt;li id="footer-places-mobileview"&gt;&lt;a href="//de.m.wikipedia.org/w/index.php?title=Extensible_Markup_Language&amp;mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle"&gt;Mobile Ansicht&lt;/a&gt;&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;ul id="footer-icons" class="noprint"&gt;
+      &lt;li id="footer-copyrightico"&gt;
+      &lt;a href="https://wikimediafoundation.org/"&gt;&lt;img src="/static/images/wikimedia-button.png" srcset="/static/images/wikimedia-button-1.5x.png 1.5x, /static/images/wikimedia-button-2x.png 2x" width="88" height="31" alt="Wikimedia Foundation"/&gt;&lt;/a&gt;					&lt;/li&gt;
+      &lt;li id="footer-poweredbyico"&gt;
+      &lt;a href="https://www.mediawiki.org/"&gt;&lt;img src="/static/images/poweredby_mediawiki_88x31.png" alt="Powered by MediaWiki" srcset="/static/images/poweredby_mediawiki_132x47.png 1.5x, /static/images/poweredby_mediawiki_176x62.png 2x" width="88" height="31"/&gt;&lt;/a&gt;					&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;div style="clear: both;"&gt;&lt;/div&gt;
+      &lt;/div&gt;
+
+
+      &lt;script&gt;(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgPageParseReport":{"limitreport":{"cputime":"0.468","walltime":"0.611","ppvisitednodes":{"value":3333,"limit":1000000},"ppgeneratednodes":{"value":0,"limit":1500000},"postexpandincludesize":{"value":52620,"limit":2097152},"templateargumentsize":{"value":17707,"limit":2097152},"expansiondepth":{"value":14,"limit":40},"expensivefunctioncount":{"value":3,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-siz [...]
+      &lt;script type="application/ld+json"&gt;{"@context":"https:\/\/schema.org","@type":"Article","name":"Extensible Markup Language","url":"https:\/\/de.wikipedia.org\/wiki\/Extensible_Markup_Language","sameAs":"http:\/\/www.wikidata.org\/entity\/Q2115","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q2115","author":{"@type":"Organization","name":"Autoren der Wikimedia-Projekte"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","ur [...]
+      &lt;script&gt;(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgBackendResponseTime":161,"wgHostname":"mw1246"});});&lt;/script&gt;
+      &lt;/body&gt;
+      &lt;/html&gt;
+   </test>
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test17.json b/components/camel-xj/src/test/resources/xml2json/test17.json
new file mode 100644
index 0000000..7dbbf63
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test17.json
@@ -0,0 +1,29 @@
+{
+  "type": {
+    "b": "c",
+    "#text": null
+  },
+  "displayName": "true",
+  "lastname": 1.2,
+  "role": 2.1e10,
+  "base64": "SGFsbG8K",
+  "company": {
+    "company": "test",
+    "id": "company",
+    "#text": [
+      "whoo",
+      "\n      8\n   "
+    ]
+  },
+  "#text": [
+    "\n   text1\n   ",
+    "\n   text2\n"
+  ],
+  "object": [
+    {
+      "id": "b",
+      "#text": "1"
+    },
+    false
+  ]
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test17.xml b/components/camel-xj/src/test/resources/xml2json/test17.xml
new file mode 100644
index 0000000..e9e9dc9
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test17.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj">
+   text1
+   <object id="b">1</object>
+   <object xj:name="type" xj:type="null" b="c">null</object>
+   <object xj:name="displayName">true</object>
+   <object xj:type="boolean">false</object>
+   <object xj:name="lastname" xj:type="float">1.2</object>
+   <object xj:name="role" xj:type="float">2.1e10</object>
+   <object xj:name="base64" xj:type="string">SGFsbG8K</object>
+   <object xj:name="company" xj:type="string" company="test" id="company">
+      <object xj:name="#text">whoo</object>
+      8
+   </object>
+   text2
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test18.json b/components/camel-xj/src/test/resources/xml2json/test18.json
new file mode 100644
index 0000000..d0ffbfc
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test18.json
@@ -0,0 +1,22 @@
+{
+  "type": null,
+  "displayName": "",
+  "lastname": null,
+  "role": null,
+  "base64": "",
+  "company": {
+    "company": "test",
+    "id": "company",
+    "#text": "whoo"
+  },
+  "#text": [
+    "\n   text1\n   ",
+    "\n   text2\n"
+  ],
+  "object": [
+    {
+      "id": "b"
+    },
+    null
+  ]
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test18.xml b/components/camel-xj/src/test/resources/xml2json/test18.xml
new file mode 100644
index 0000000..c771450
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test18.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj">
+   text1
+   <object id="b"/>
+   <object xj:name="type" xj:type="null" b="c"></object>
+   <object xj:name="displayName"></object>
+   <object xj:type="boolean"/>
+   <object xj:name="lastname" xj:type="float"></object>
+   <object xj:name="role" xj:type="float"/>
+   <object xj:name="base64" xj:type="string"/>
+   <object xj:name="company" xj:type="string" company="test" id="company">
+      <object xj:name="#text">whoo</object>
+   </object>
+   text2
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test19.json b/components/camel-xj/src/test/resources/xml2json/test19.json
new file mode 100644
index 0000000..32960f8
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test19.json
@@ -0,0 +1,2 @@
+[
+]
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test19.xml b/components/camel-xj/src/test/resources/xml2json/test19.xml
new file mode 100644
index 0000000..2f5b13e
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test19.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj" xj:type="array">
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test2.json b/components/camel-xj/src/test/resources/xml2json/test2.json
new file mode 100644
index 0000000..3931054
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test2.json
@@ -0,0 +1,26 @@
+[
+  {
+    "id": "1",
+    "type": "2",
+    "displayName": "3",
+    "firstname": "4",
+    "lastname": "5",
+    "role": "6",
+    "email": "7",
+    "company": "8",
+    "department": "9",
+    "division": "10"
+  },
+  {
+    "id": "11",
+    "type": "12",
+    "displayName": "13",
+    "firstname": "14",
+    "lastname": "15",
+    "role": "16",
+    "email": "17",
+    "company": "18",
+    "department": "19",
+    "division": "20"
+  }
+]
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test2.xml b/components/camel-xj/src/test/resources/xml2json/test2.xml
new file mode 100644
index 0000000..0a57fb1
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test2.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj">
+   <object>
+      <object xj:name="id">1</object>
+      <object xj:name="type">2</object>
+      <object xj:name="displayName">3</object>
+      <object xj:name="firstname">4</object>
+      <object xj:name="lastname">5</object>
+      <object xj:name="role">6</object>
+      <object xj:name="email">7</object>
+      <object xj:name="company">8</object>
+      <object xj:name="department">9</object>
+      <object xj:name="division">10</object>
+   </object>
+   <object>
+      <object xj:name="id">11</object>
+      <object xj:name="type">12</object>
+      <object xj:name="displayName">13</object>
+      <object xj:name="firstname">14</object>
+      <object xj:name="lastname">15</object>
+      <object xj:name="role">16</object>
+      <object xj:name="email">17</object>
+      <object xj:name="company">18</object>
+      <object xj:name="department">19</object>
+      <object xj:name="division">20</object>
+   </object>
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test20.json b/components/camel-xj/src/test/resources/xml2json/test20.json
new file mode 100644
index 0000000..7a73a41
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test20.json
@@ -0,0 +1,2 @@
+{
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test20.xml b/components/camel-xj/src/test/resources/xml2json/test20.xml
new file mode 100644
index 0000000..7fff1ae
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test20.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj" xj:type="object">
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test21.json b/components/camel-xj/src/test/resources/xml2json/test21.json
new file mode 100644
index 0000000..7a73a41
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test21.json
@@ -0,0 +1,2 @@
+{
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test21.xml b/components/camel-xj/src/test/resources/xml2json/test21.xml
new file mode 100644
index 0000000..1d25351
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test21.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj">
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test22.json b/components/camel-xj/src/test/resources/xml2json/test22.json
new file mode 100644
index 0000000..7a73a41
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test22.json
@@ -0,0 +1,2 @@
+{
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test22.xml b/components/camel-xj/src/test/resources/xml2json/test22.xml
new file mode 100644
index 0000000..87bd3ef
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test22.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj"/>
diff --git a/components/camel-xj/src/test/resources/xml2json/test23.json b/components/camel-xj/src/test/resources/xml2json/test23.json
new file mode 100644
index 0000000..904968e
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test23.json
@@ -0,0 +1,5 @@
+[
+  "1",
+  "2",
+  "3"
+]
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test23.xml b/components/camel-xj/src/test/resources/xml2json/test23.xml
new file mode 100644
index 0000000..d7a7ba3
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test23.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj" xj:type="array">
+    <object>1</object>
+    <object>2</object>
+    <object>3</object>
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test3.json b/components/camel-xj/src/test/resources/xml2json/test3.json
new file mode 100644
index 0000000..b1b8e86
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test3.json
@@ -0,0 +1,26 @@
+{
+  "a": [
+    "1",
+    "2",
+    "3",
+    "4",
+    "5",
+    "6",
+    "7",
+    "8",
+    "9",
+    "10"
+  ],
+  "object": [
+    "11",
+    "12",
+    "13",
+    "14",
+    "15",
+    "16",
+    "17",
+    "18",
+    "19",
+    "20"
+  ]
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test3.xml b/components/camel-xj/src/test/resources/xml2json/test3.xml
new file mode 100644
index 0000000..6e4abf2
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test3.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj">
+   <object xj:name="a">
+      <object>1</object>
+      <object>2</object>
+      <object>3</object>
+      <object>4</object>
+      <object>5</object>
+      <object>6</object>
+      <object>7</object>
+      <object>8</object>
+      <object>9</object>
+      <object>10</object>
+   </object>
+   <object>
+      <object>11</object>
+      <object>12</object>
+      <object>13</object>
+      <object>14</object>
+      <object>15</object>
+      <object>16</object>
+      <object>17</object>
+      <object>18</object>
+      <object>19</object>
+      <object>20</object>
+   </object>
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test4.json b/components/camel-xj/src/test/resources/xml2json/test4.json
new file mode 100644
index 0000000..796fe9a
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test4.json
@@ -0,0 +1,26 @@
+{
+  "a": [
+    "1",
+    "2",
+    "3",
+    "4",
+    "5",
+    "6",
+    "7",
+    "8",
+    "9",
+    "10"
+  ],
+  "b": [
+    "11",
+    "12",
+    "13",
+    "14",
+    "15",
+    "16",
+    "17",
+    "18",
+    "19",
+    "20"
+  ]
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test4.xml b/components/camel-xj/src/test/resources/xml2json/test4.xml
new file mode 100644
index 0000000..b879a9b
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test4.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj">
+   <object xj:name="a">
+      <object>1</object>
+      <object>2</object>
+      <object>3</object>
+      <object>4</object>
+      <object>5</object>
+      <object>6</object>
+      <object>7</object>
+      <object>8</object>
+      <object>9</object>
+      <object>10</object>
+   </object>
+   <object xj:name="b">
+      <object>11</object>
+      <object>12</object>
+      <object>13</object>
+      <object>14</object>
+      <object>15</object>
+      <object>16</object>
+      <object>17</object>
+      <object>18</object>
+      <object>19</object>
+      <object>20</object>
+   </object>
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test5.json b/components/camel-xj/src/test/resources/xml2json/test5.json
new file mode 100644
index 0000000..bfc6b4f
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test5.json
@@ -0,0 +1,26 @@
+[
+  [
+    "1",
+    "2",
+    "3",
+    "4",
+    "5",
+    "6",
+    "7",
+    "8",
+    "9",
+    "10"
+  ],
+  [
+    "11",
+    "12",
+    "13",
+    "14",
+    "15",
+    "16",
+    "17",
+    "18",
+    "19",
+    "20"
+  ]
+]
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test5.xml b/components/camel-xj/src/test/resources/xml2json/test5.xml
new file mode 100644
index 0000000..1dc0222
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test5.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xj:name="id" xmlns:xj="http://camel.apache.org/component/xj">
+   <object>
+      <object>1</object>
+      <object>2</object>
+      <object>3</object>
+      <object>4</object>
+      <object>5</object>
+      <object>6</object>
+      <object>7</object>
+      <object>8</object>
+      <object>9</object>
+      <object>10</object>
+   </object>
+   <object>
+      <object>11</object>
+      <object>12</object>
+      <object>13</object>
+      <object>14</object>
+      <object>15</object>
+      <object>16</object>
+      <object>17</object>
+      <object>18</object>
+      <object>19</object>
+      <object>20</object>
+   </object>
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test6.json b/components/camel-xj/src/test/resources/xml2json/test6.json
new file mode 100644
index 0000000..da6fea0
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test6.json
@@ -0,0 +1,28 @@
+[
+  {
+    "id": "1",
+    "object": [
+      "2",
+      "3",
+      "4",
+      "5",
+      "6",
+      "7",
+      "8",
+      "9",
+      "10"
+    ]
+  },
+  [
+    "11",
+    "12",
+    "13",
+    "14",
+    "15",
+    "16",
+    "17",
+    "18",
+    "19",
+    "20"
+  ]
+]
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test6.xml b/components/camel-xj/src/test/resources/xml2json/test6.xml
new file mode 100644
index 0000000..e7a9557
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test6.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj">
+   <object>
+      <object xj:name="id">1</object>
+      <object>2</object>
+      <object>3</object>
+      <object>4</object>
+      <object>5</object>
+      <object>6</object>
+      <object>7</object>
+      <object>8</object>
+      <object>9</object>
+      <object>10</object>
+   </object>
+   <object>
+      <object>11</object>
+      <object>12</object>
+      <object>13</object>
+      <object>14</object>
+      <object>15</object>
+      <object>16</object>
+      <object>17</object>
+      <object>18</object>
+      <object>19</object>
+      <object>20</object>
+   </object>
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test7.json b/components/camel-xj/src/test/resources/xml2json/test7.json
new file mode 100644
index 0000000..e893a46
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test7.json
@@ -0,0 +1,26 @@
+{
+  "a": {
+    "id": "1",
+    "type": "2",
+    "displayName": "3",
+    "firstname": "4",
+    "lastname": "5",
+    "role": "6",
+    "email": "7",
+    "company": "8",
+    "department": "9",
+    "division": "10"
+  },
+  "b": {
+    "id": "11",
+    "type": "12",
+    "displayName": "13",
+    "firstname": "14",
+    "lastname": "15",
+    "role": "16",
+    "email": "17",
+    "company": "18",
+    "department": "19",
+    "division": "20"
+  }
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test7.xml b/components/camel-xj/src/test/resources/xml2json/test7.xml
new file mode 100644
index 0000000..5176dd2
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test7.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<object xmlns:xj="http://camel.apache.org/component/xj">
+   <object xj:name="a">
+      <object xj:name="id">1</object>
+      <object xj:name="type">2</object>
+      <object xj:name="displayName">3</object>
+      <object xj:name="firstname">4</object>
+      <object xj:name="lastname">5</object>
+      <object xj:name="role">6</object>
+      <object xj:name="email">7</object>
+      <object xj:name="company">8</object>
+      <object xj:name="department">9</object>
+      <object xj:name="division">10</object>
+   </object>
+   <object xj:name="b">
+      <object xj:name="id">11</object>
+      <object xj:name="type">12</object>
+      <object xj:name="displayName">13</object>
+      <object xj:name="firstname">14</object>
+      <object xj:name="lastname">15</object>
+      <object xj:name="role">16</object>
+      <object xj:name="email">17</object>
+      <object xj:name="company">18</object>
+      <object xj:name="department">19</object>
+      <object xj:name="division">20</object>
+   </object>
+</object>
diff --git a/components/camel-xj/src/test/resources/xml2json/test8.json b/components/camel-xj/src/test/resources/xml2json/test8.json
new file mode 100644
index 0000000..af3b6df
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test8.json
@@ -0,0 +1,33 @@
+{
+  "query": {
+    "fi&lter": {
+      "ä<type": "&",
+      "conditions": {
+        "object": {
+          "filter": {
+            "type": "and",
+            "conditions": [
+              {
+                "\nop": "contains",
+                "field": "id",
+                "value": "\trtg1"
+              },
+              {
+                "filter": {
+                  "type": "not",
+                  "conditions": {
+                    "object": {
+                      "op": "eq",
+                      "field": "id",
+                      "value": "ext-rtg1"
+                    }
+                  }
+                }
+              }
+            ]
+          }
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test8.xml b/components/camel-xj/src/test/resources/xml2json/test8.xml
new file mode 100644
index 0000000..35dbc9c
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test8.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?><object xmlns:xj="http://camel.apache.org/component/xj">
+   <object xj:name="query">
+      <object xj:name="fi&amp;lter">
+         <object xj:name="ä&lt;type">&amp;</object>
+         <object xj:name="conditions">
+            <object>
+               <object xj:name="filter">
+                  <object xj:name="type">and</object>
+                  <object xj:name="conditions">
+                     <object>
+                        <object xj:name="&#10;op">contains</object>
+                        <object xj:name="field">id</object>
+                        <object xj:name="value">	rtg1</object>
+                     </object>
+                     <object>
+                        <object xj:name="filter">
+                           <object xj:name="type">not</object>
+                           <object xj:name="conditions">
+                              <object>
+                                 <object xj:name="op">eq</object>
+                                 <object xj:name="field">id</object>
+                                 <object xj:name="value">ext-rtg1</object>
+                              </object>
+                           </object>
+                        </object>
+                     </object>
+                  </object>
+               </object>
+            </object>
+         </object>
+      </object>
+   </object>
+</object>
\ No newline at end of file
diff --git a/components/camel-xj/src/test/resources/xml2json/test9.json b/components/camel-xj/src/test/resources/xml2json/test9.json
new file mode 100644
index 0000000..38956dc
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test9.json
@@ -0,0 +1,231 @@
+{
+  "object": {
+    "\t": "\t",
+    "\n": "\n",
+    "\r": "\r",
+    " ": " ",
+    "!": "!",
+    "\"": "\"",
+    "#": "#",
+    "$": "$",
+    "%": "%",
+    "&": "&",
+    "'": "'",
+    "(": "(",
+    ")": ")",
+    "*": "*",
+    "+": "+",
+    ",": ",",
+    "-": "-",
+    ".": ".",
+    "/": "/",
+    "0": "0",
+    "1": "1",
+    "2": "2",
+    "3": "3",
+    "4": "4",
+    "5": "5",
+    "6": "6",
+    "7": "7",
+    "8": "8",
+    "9": "9",
+    ":": ":",
+    ";": ";",
+    "<": "<",
+    "=": "=",
+    ">": ">",
+    "?": "?",
+    "@": "@",
+    "A": "A",
+    "B": "B",
+    "C": "C",
+    "D": "D",
+    "E": "E",
+    "F": "F",
+    "G": "G",
+    "H": "H",
+    "I": "I",
+    "J": "J",
+    "K": "K",
+    "L": "L",
+    "M": "M",
+    "N": "N",
+    "O": "O",
+    "P": "P",
+    "Q": "Q",
+    "R": "R",
+    "S": "S",
+    "T": "T",
+    "U": "U",
+    "V": "V",
+    "W": "W",
+    "X": "X",
+    "Y": "Y",
+    "Z": "Z",
+    "[": "[",
+    "\\": "\\",
+    "]": "]",
+    "^": "^",
+    "_": "_",
+    "`": "`",
+    "a": "a",
+    "b": "b",
+    "c": "c",
+    "d": "d",
+    "e": "e",
+    "f": "f",
+    "g": "g",
+    "h": "h",
+    "i": "i",
+    "j": "j",
+    "k": "k",
+    "l": "l",
+    "m": "m",
+    "n": "n",
+    "o": "o",
+    "p": "p",
+    "q": "q",
+    "r": "r",
+    "s": "s",
+    "t": "t",
+    "u": "u",
+    "v": "v",
+    "w": "w",
+    "x": "x",
+    "y": "y",
+    "z": "z",
+    "{": "{",
+    "|": "|",
+    "}": "}",
+    "~": "~",
+    "": "",
+    "€": "€",
+    "": "",
+    "‚": "‚",
+    "ƒ": "ƒ",
+    "„": "„",
+    "…": "…",
+    "†": "†",
+    "‡": "‡",
+    "ˆ": "ˆ",
+    "‰": "‰",
+    "Š": "Š",
+    "‹": "‹",
+    "Œ": "Œ",
+    "": "",
+    "Ž": "Ž",
+    "": "",
+    "": "",
+    "‘": "‘",
+    "’": "’",
+    "“": "“",
+    "”": "”",
+    "•": "•",
+    "–": "–",
+    "—": "—",
+    "˜": "˜",
+    "™": "™",
+    "š": "š",
+    "›": "›",
+    "œ": "œ",
+    "": "",
+    "ž": "ž",
+    "Ÿ": "Ÿ",
+    " ": " ",
+    "¡": "¡",
+    "¢": "¢",
+    "£": "£",
+    "¤": "¤",
+    "¥": "¥",
+    "¦": "¦",
+    "§": "§",
+    "¨": "¨",
+    "©": "©",
+    "ª": "ª",
+    "«": "«",
+    "¬": "¬",
+    "­": "­",
+    "®": "®",
+    "¯": "¯",
+    "°": "°",
+    "±": "±",
+    "²": "²",
+    "³": "³",
+    "´": "´",
+    "µ": "µ",
+    "¶": "¶",
+    "·": "·",
+    "¸": "¸",
+    "¹": "¹",
+    "º": "º",
+    "»": "»",
+    "¼": "¼",
+    "½": "½",
+    "¾": "¾",
+    "¿": "¿",
+    "À": "À",
+    "Á": "Á",
+    "Â": "Â",
+    "Ã": "Ã",
+    "Ä": "Ä",
+    "Å": "Å",
+    "Æ": "Æ",
+    "Ç": "Ç",
+    "È": "È",
+    "É": "É",
+    "Ê": "Ê",
+    "Ë": "Ë",
+    "Ì": "Ì",
+    "Í": "Í",
+    "Î": "Î",
+    "Ï": "Ï",
+    "Ð": "Ð",
+    "Ñ": "Ñ",
+    "Ò": "Ò",
+    "Ó": "Ó",
+    "Ô": "Ô",
+    "Õ": "Õ",
+    "Ö": "Ö",
+    "×": "×",
+    "Ø": "Ø",
+    "Ù": "Ù",
+    "Ú": "Ú",
+    "Û": "Û",
+    "Ü": "Ü",
+    "Ý": "Ý",
+    "Þ": "Þ",
+    "ß": "ß",
+    "à": "à",
+    "á": "á",
+    "â": "â",
+    "ã": "ã",
+    "ä": "ä",
+    "å": "å",
+    "æ": "æ",
+    "ç": "ç",
+    "è": "è",
+    "é": "é",
+    "ê": "ê",
+    "ë": "ë",
+    "ì": "ì",
+    "í": "í",
+    "î": "î",
+    "ï": "ï",
+    "ð": "ð",
+    "ñ": "ñ",
+    "ò": "ò",
+    "ó": "ó",
+    "ô": "ô",
+    "õ": "õ",
+    "ö": "ö",
+    "÷": "÷",
+    "ø": "ø",
+    "ù": "ù",
+    "ú": "ú",
+    "û": "û",
+    "ü": "ü",
+    "ý": "ý",
+    "þ": "þ",
+    "ÿ": "ÿ"
+  }
+} 
diff --git a/components/camel-xj/src/test/resources/xml2json/test9.xml b/components/camel-xj/src/test/resources/xml2json/test9.xml
new file mode 100644
index 0000000..cef2dd4
--- /dev/null
+++ b/components/camel-xj/src/test/resources/xml2json/test9.xml
@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="UTF-8"?><object xmlns:xj="http://camel.apache.org/component/xj">
+   <object>
+      <object xj:name="&#9;">&#9;</object>
+      <object xj:name="&#10;">&#10;</object>
+      <object xj:name="&#13;">&#13;</object>
+      <object xj:name=" "> </object>
+      <object xj:name="!">!</object>
+      <object xj:name="&quot;">"</object>
+      <object xj:name="#">#</object>
+      <object xj:name="$">$</object>
+      <object xj:name="%">%</object>
+      <object xj:name="&amp;">&amp;</object>
+      <object xj:name="'">'</object>
+      <object xj:name="(">(</object>
+      <object xj:name=")">)</object>
+      <object xj:name="*">*</object>
+      <object xj:name="+">+</object>
+      <object xj:name=",">,</object>
+      <object xj:name="-">-</object>
+      <object xj:name=".">.</object>
+      <object xj:name="/">/</object>
+      <object xj:name="0">0</object>
+      <object xj:name="1">1</object>
+      <object xj:name="2">2</object>
+      <object xj:name="3">3</object>
+      <object xj:name="4">4</object>
+      <object xj:name="5">5</object>
+      <object xj:name="6">6</object>
+      <object xj:name="7">7</object>
+      <object xj:name="8">8</object>
+      <object xj:name="9">9</object>
+      <object xj:name=":">:</object>
+      <object xj:name=";">;</object>
+      <object xj:name="&lt;">&lt;</object>
+      <object xj:name="=">=</object>
+      <object xj:name="&gt;">&gt;</object>
+      <object xj:name="?">?</object>
+      <object xj:name="@">@</object>
+      <object xj:name="A">A</object>
+      <object xj:name="B">B</object>
+      <object xj:name="C">C</object>
+      <object xj:name="D">D</object>
+      <object xj:name="E">E</object>
+      <object xj:name="F">F</object>
+      <object xj:name="G">G</object>
+      <object xj:name="H">H</object>
+      <object xj:name="I">I</object>
+      <object xj:name="J">J</object>
+      <object xj:name="K">K</object>
+      <object xj:name="L">L</object>
+      <object xj:name="M">M</object>
+      <object xj:name="N">N</object>
+      <object xj:name="O">O</object>
+      <object xj:name="P">P</object>
+      <object xj:name="Q">Q</object>
+      <object xj:name="R">R</object>
+      <object xj:name="S">S</object>
+      <object xj:name="T">T</object>
+      <object xj:name="U">U</object>
+      <object xj:name="V">V</object>
+      <object xj:name="W">W</object>
+      <object xj:name="X">X</object>
+      <object xj:name="Y">Y</object>
+      <object xj:name="Z">Z</object>
+      <object xj:name="[">[</object>
+      <object xj:name="\">\</object>
+      <object xj:name="]">]</object>
+      <object xj:name="^">^</object>
+      <object xj:name="_">_</object>
+      <object xj:name="`">`</object>
+      <object xj:name="a">a</object>
+      <object xj:name="b">b</object>
+      <object xj:name="c">c</object>
+      <object xj:name="d">d</object>
+      <object xj:name="e">e</object>
+      <object xj:name="f">f</object>
+      <object xj:name="g">g</object>
+      <object xj:name="h">h</object>
+      <object xj:name="i">i</object>
+      <object xj:name="j">j</object>
+      <object xj:name="k">k</object>
+      <object xj:name="l">l</object>
+      <object xj:name="m">m</object>
+      <object xj:name="n">n</object>
+      <object xj:name="o">o</object>
+      <object xj:name="p">p</object>
+      <object xj:name="q">q</object>
+      <object xj:name="r">r</object>
+      <object xj:name="s">s</object>
+      <object xj:name="t">t</object>
+      <object xj:name="u">u</object>
+      <object xj:name="v">v</object>
+      <object xj:name="w">w</object>
+      <object xj:name="x">x</object>
+      <object xj:name="y">y</object>
+      <object xj:name="z">z</object>
+      <object xj:name="{">{</object>
+      <object xj:name="|">|</object>
+      <object xj:name="}">}</object>
+      <object xj:name="~">~</object>
+      <object xj:name="">&#127;</object>
+      <object xj:name="€">&#128;</object>
+      <object xj:name="">&#129;</object>
+      <object xj:name="‚">&#130;</object>
+      <object xj:name="ƒ">&#131;</object>
+      <object xj:name="„">&#132;</object>
+      <object xj:name="…">&#133;</object>
+      <object xj:name="†">&#134;</object>
+      <object xj:name="‡">&#135;</object>
+      <object xj:name="ˆ">&#136;</object>
+      <object xj:name="‰">&#137;</object>
+      <object xj:name="Š">&#138;</object>
+      <object xj:name="‹">&#139;</object>
+      <object xj:name="Œ">&#140;</object>
+      <object xj:name="">&#141;</object>
+      <object xj:name="Ž">&#142;</object>
+      <object xj:name="">&#143;</object>
+      <object xj:name="">&#144;</object>
+      <object xj:name="‘">&#145;</object>
+      <object xj:name="’">&#146;</object>
+      <object xj:name="“">&#147;</object>
+      <object xj:name="”">&#148;</object>
+      <object xj:name="•">&#149;</object>
+      <object xj:name="–">&#150;</object>
+      <object xj:name="—">&#151;</object>
+      <object xj:name="˜">&#152;</object>
+      <object xj:name="™">&#153;</object>
+      <object xj:name="š">&#154;</object>
+      <object xj:name="›">&#155;</object>
+      <object xj:name="œ">&#156;</object>
+      <object xj:name="">&#157;</object>
+      <object xj:name="ž">&#158;</object>
+      <object xj:name="Ÿ">&#159;</object>
+      <object xj:name=" "> </object>
+      <object xj:name="¡">¡</object>
+      <object xj:name="¢">¢</object>
+      <object xj:name="£">£</object>
+      <object xj:name="¤">¤</object>
+      <object xj:name="¥">¥</object>
+      <object xj:name="¦">¦</object>
+      <object xj:name="§">§</object>
+      <object xj:name="¨">¨</object>
+      <object xj:name="©">©</object>
+      <object xj:name="ª">ª</object>
+      <object xj:name="«">«</object>
+      <object xj:name="¬">¬</object>
+      <object xj:name="­">­</object>
+      <object xj:name="®">®</object>
+      <object xj:name="¯">¯</object>
+      <object xj:name="°">°</object>
+      <object xj:name="±">±</object>
+      <object xj:name="²">²</object>
+      <object xj:name="³">³</object>
+      <object xj:name="´">´</object>
+      <object xj:name="µ">µ</object>
+      <object xj:name="¶">¶</object>
+      <object xj:name="·">·</object>
+      <object xj:name="¸">¸</object>
+      <object xj:name="¹">¹</object>
+      <object xj:name="º">º</object>
+      <object xj:name="»">»</object>
+      <object xj:name="¼">¼</object>
+      <object xj:name="½">½</object>
+      <object xj:name="¾">¾</object>
+      <object xj:name="¿">¿</object>
+      <object xj:name="À">À</object>
+      <object xj:name="Á">Á</object>
+      <object xj:name="Â">Â</object>
+      <object xj:name="Ã">Ã</object>
+      <object xj:name="Ä">Ä</object>
+      <object xj:name="Å">Å</object>
+      <object xj:name="Æ">Æ</object>
+      <object xj:name="Ç">Ç</object>
+      <object xj:name="È">È</object>
+      <object xj:name="É">É</object>
+      <object xj:name="Ê">Ê</object>
+      <object xj:name="Ë">Ë</object>
+      <object xj:name="Ì">Ì</object>
+      <object xj:name="Í">Í</object>
+      <object xj:name="Î">Î</object>
+      <object xj:name="Ï">Ï</object>
+      <object xj:name="Ð">Ð</object>
+      <object xj:name="Ñ">Ñ</object>
+      <object xj:name="Ò">Ò</object>
+      <object xj:name="Ó">Ó</object>
+      <object xj:name="Ô">Ô</object>
+      <object xj:name="Õ">Õ</object>
+      <object xj:name="Ö">Ö</object>
+      <object xj:name="×">×</object>
+      <object xj:name="Ø">Ø</object>
+      <object xj:name="Ù">Ù</object>
+      <object xj:name="Ú">Ú</object>
+      <object xj:name="Û">Û</object>
+      <object xj:name="Ü">Ü</object>
+      <object xj:name="Ý">Ý</object>
+      <object xj:name="Þ">Þ</object>
+      <object xj:name="ß">ß</object>
+      <object xj:name="à">à</object>
+      <object xj:name="á">á</object>
+      <object xj:name="â">â</object>
+      <object xj:name="ã">ã</object>
+      <object xj:name="ä">ä</object>
+      <object xj:name="å">å</object>
+      <object xj:name="æ">æ</object>
+      <object xj:name="ç">ç</object>
+      <object xj:name="è">è</object>
+      <object xj:name="é">é</object>
+      <object xj:name="ê">ê</object>
+      <object xj:name="ë">ë</object>
+      <object xj:name="ì">ì</object>
+      <object xj:name="í">í</object>
+      <object xj:name="î">î</object>
+      <object xj:name="ï">ï</object>
+      <object xj:name="ð">ð</object>
+      <object xj:name="ñ">ñ</object>
+      <object xj:name="ò">ò</object>
+      <object xj:name="ó">ó</object>
+      <object xj:name="ô">ô</object>
+      <object xj:name="õ">õ</object>
+      <object xj:name="ö">ö</object>
+      <object xj:name="÷">÷</object>
+      <object xj:name="ø">ø</object>
+      <object xj:name="ù">ù</object>
+      <object xj:name="ú">ú</object>
+      <object xj:name="û">û</object>
+      <object xj:name="ü">ü</object>
+      <object xj:name="ý">ý</object>
+      <object xj:name="þ">þ</object>
+      <object xj:name="ÿ">ÿ</object>
+   </object>
+</object>
diff --git a/components/pom.xml b/components/pom.xml
index 2e0b609..4762e0f 100644
--- a/components/pom.xml
+++ b/components/pom.xml
@@ -336,6 +336,7 @@
         <module>camel-websocket-jsr356</module>
         <module>camel-wordpress</module>
         <module>camel-xchange</module>
+        <module>camel-xj</module>
         <module>camel-xmlsecurity</module>
         <module>camel-xmpp</module>
         <module>camel-xstream</module>
diff --git a/components/readme.adoc b/components/readme.adoc
index 3638b06..bab8b5e 100644
--- a/components/readme.adoc
+++ b/components/readme.adoc
@@ -874,6 +874,9 @@ Number of Components: 297 in 235 JAR artifacts (0 deprecated)
 | link:camel-xchange/src/main/docs/xchange-component.adoc[XChange] (camel-xchange) +
 `xchange:name` | 2.21 | The camel-xchange component provide access to many bitcoin and altcoin exchanges for trading and accessing market data.
 
+| link:camel-xj/src/main/docs/xj-component.adoc[XJ] (camel-xj) +
+`xj:resourceUri` | 2.25 | Transforms json/xml message back and forth using a XSLT.
+
 | link:camel-xmlsecurity/src/main/docs/xmlsecurity-component.adoc[XML Security] (camel-xmlsecurity) +
 `xmlsecurity:command:name` | 2.12 | Used to sign and verify exchanges using the XML signature specification.
 
diff --git a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XJEndpointBuilderFactory.java b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XJEndpointBuilderFactory.java
new file mode 100644
index 0000000..1f978fa
--- /dev/null
+++ b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XJEndpointBuilderFactory.java
@@ -0,0 +1,549 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.builder.endpoint.dsl;
+
+import java.util.List;
+import javax.annotation.Generated;
+import org.apache.camel.builder.EndpointConsumerBuilder;
+import org.apache.camel.builder.EndpointProducerBuilder;
+import org.apache.camel.builder.endpoint.AbstractEndpointBuilder;
+
+/**
+ * Transforms json/xml message back and forth using a XSLT.
+ * 
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.EndpointDslMojo")
+public interface XJEndpointBuilderFactory {
+
+
+    /**
+     * Builder for endpoint for the XJ component.
+     */
+    public interface XJEndpointBuilder extends EndpointProducerBuilder {
+        default AdvancedXJEndpointBuilder advanced() {
+            return (AdvancedXJEndpointBuilder) this;
+        }
+        /**
+         * Cache for the resource content (the stylesheet file) when it is
+         * loaded. If set to false Camel will reload the stylesheet file on each
+         * message processing. This is good for development. A cached stylesheet
+         * can be forced to reload at runtime via JMX using the
+         * clearCachedStylesheet operation.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Group: producer
+         */
+        default XJEndpointBuilder contentCache(boolean contentCache) {
+            setProperty("contentCache", contentCache);
+            return this;
+        }
+        /**
+         * Cache for the resource content (the stylesheet file) when it is
+         * loaded. If set to false Camel will reload the stylesheet file on each
+         * message processing. This is good for development. A cached stylesheet
+         * can be forced to reload at runtime via JMX using the
+         * clearCachedStylesheet operation.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Group: producer
+         */
+        default XJEndpointBuilder contentCache(String contentCache) {
+            setProperty("contentCache", contentCache);
+            return this;
+        }
+        /**
+         * If you have output=file then this option dictates whether or not the
+         * output file should be deleted when the Exchange is done processing.
+         * For example suppose the output file is a temporary file, then it can
+         * be a good idea to delete it after use.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Group: producer
+         */
+        default XJEndpointBuilder deleteOutputFile(boolean deleteOutputFile) {
+            setProperty("deleteOutputFile", deleteOutputFile);
+            return this;
+        }
+        /**
+         * If you have output=file then this option dictates whether or not the
+         * output file should be deleted when the Exchange is done processing.
+         * For example suppose the output file is a temporary file, then it can
+         * be a good idea to delete it after use.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Group: producer
+         */
+        default XJEndpointBuilder deleteOutputFile(String deleteOutputFile) {
+            setProperty("deleteOutputFile", deleteOutputFile);
+            return this;
+        }
+        /**
+         * Whether or not to throw an exception if the input body is null.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Group: producer
+         */
+        default XJEndpointBuilder failOnNullBody(boolean failOnNullBody) {
+            setProperty("failOnNullBody", failOnNullBody);
+            return this;
+        }
+        /**
+         * Whether or not to throw an exception if the input body is null.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Group: producer
+         */
+        default XJEndpointBuilder failOnNullBody(String failOnNullBody) {
+            setProperty("failOnNullBody", failOnNullBody);
+            return this;
+        }
+        /**
+         * Option to specify which output type to use. Possible values are:
+         * string, bytes, DOM, file. The first three options are all in memory
+         * based, where as file is streamed directly to a java.io.File. For file
+         * you must specify the filename in the IN header with the key
+         * Exchange.XSLT_FILE_NAME which is also CamelXsltFileName. Also any
+         * paths leading to the filename must be created beforehand, otherwise
+         * an exception is thrown at runtime.
+         * 
+         * The option is a:
+         * <code>org.apache.camel.component.xslt.XsltOutput</code> type.
+         * 
+         * Group: producer
+         */
+        default XJEndpointBuilder output(XsltOutput output) {
+            setProperty("output", output);
+            return this;
+        }
+        /**
+         * Option to specify which output type to use. Possible values are:
+         * string, bytes, DOM, file. The first three options are all in memory
+         * based, where as file is streamed directly to a java.io.File. For file
+         * you must specify the filename in the IN header with the key
+         * Exchange.XSLT_FILE_NAME which is also CamelXsltFileName. Also any
+         * paths leading to the filename must be created beforehand, otherwise
+         * an exception is thrown at runtime.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.camel.component.xslt.XsltOutput</code> type.
+         * 
+         * Group: producer
+         */
+        default XJEndpointBuilder output(String output) {
+            setProperty("output", output);
+            return this;
+        }
+        /**
+         * Whether to use Saxon as the transformerFactoryClass. If enabled then
+         * the class net.sf.saxon.TransformerFactoryImpl. You would need to add
+         * Saxon to the classpath.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Group: producer
+         */
+        default XJEndpointBuilder saxon(boolean saxon) {
+            setProperty("saxon", saxon);
+            return this;
+        }
+        /**
+         * Whether to use Saxon as the transformerFactoryClass. If enabled then
+         * the class net.sf.saxon.TransformerFactoryImpl. You would need to add
+         * Saxon to the classpath.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Group: producer
+         */
+        default XJEndpointBuilder saxon(String saxon) {
+            setProperty("saxon", saxon);
+            return this;
+        }
+        /**
+         * The transform direction. Either XML2JSON or JSON2XML.
+         * 
+         * The option is a:
+         * <code>org.apache.camel.component.xj.TransformDirection</code> type.
+         * 
+         * Required: true
+         * Group: producer
+         */
+        default XJEndpointBuilder transformDirection(
+                TransformDirection transformDirection) {
+            setProperty("transformDirection", transformDirection);
+            return this;
+        }
+        /**
+         * The transform direction. Either XML2JSON or JSON2XML.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.camel.component.xj.TransformDirection</code> type.
+         * 
+         * Required: true
+         * Group: producer
+         */
+        default XJEndpointBuilder transformDirection(String transformDirection) {
+            setProperty("transformDirection", transformDirection);
+            return this;
+        }
+        /**
+         * The number of javax.xml.transform.Transformer object that are cached
+         * for reuse to avoid calls to Template.newTransformer().
+         * 
+         * The option is a: <code>int</code> type.
+         * 
+         * Group: producer
+         */
+        default XJEndpointBuilder transformerCacheSize(int transformerCacheSize) {
+            setProperty("transformerCacheSize", transformerCacheSize);
+            return this;
+        }
+        /**
+         * The number of javax.xml.transform.Transformer object that are cached
+         * for reuse to avoid calls to Template.newTransformer().
+         * 
+         * The option will be converted to a <code>int</code> type.
+         * 
+         * Group: producer
+         */
+        default XJEndpointBuilder transformerCacheSize(
+                String transformerCacheSize) {
+            setProperty("transformerCacheSize", transformerCacheSize);
+            return this;
+        }
+    }
+
+    /**
+     * Advanced builder for endpoint for the XJ component.
+     */
+    public interface AdvancedXJEndpointBuilder
+            extends
+                EndpointProducerBuilder {
+        default XJEndpointBuilder basic() {
+            return (XJEndpointBuilder) this;
+        }
+        /**
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder basicPropertyBinding(
+                boolean basicPropertyBinding) {
+            setProperty("basicPropertyBinding", basicPropertyBinding);
+            return this;
+        }
+        /**
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder basicPropertyBinding(
+                String basicPropertyBinding) {
+            setProperty("basicPropertyBinding", basicPropertyBinding);
+            return this;
+        }
+        /**
+         * To use a custom org.xml.sax.EntityResolver with
+         * javax.xml.transform.sax.SAXSource.
+         * 
+         * The option is a: <code>org.xml.sax.EntityResolver</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder entityResolver(Object entityResolver) {
+            setProperty("entityResolver", entityResolver);
+            return this;
+        }
+        /**
+         * To use a custom org.xml.sax.EntityResolver with
+         * javax.xml.transform.sax.SAXSource.
+         * 
+         * The option will be converted to a
+         * <code>org.xml.sax.EntityResolver</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder entityResolver(String entityResolver) {
+            setProperty("entityResolver", entityResolver);
+            return this;
+        }
+        /**
+         * Allows to configure to use a custom
+         * javax.xml.transform.ErrorListener. Beware when doing this then the
+         * default error listener which captures any errors or fatal errors and
+         * store information on the Exchange as properties is not in use. So
+         * only use this option for special use-cases.
+         * 
+         * The option is a: <code>javax.xml.transform.ErrorListener</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder errorListener(Object errorListener) {
+            setProperty("errorListener", errorListener);
+            return this;
+        }
+        /**
+         * Allows to configure to use a custom
+         * javax.xml.transform.ErrorListener. Beware when doing this then the
+         * default error listener which captures any errors or fatal errors and
+         * store information on the Exchange as properties is not in use. So
+         * only use this option for special use-cases.
+         * 
+         * The option will be converted to a
+         * <code>javax.xml.transform.ErrorListener</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder errorListener(String errorListener) {
+            setProperty("errorListener", errorListener);
+            return this;
+        }
+        /**
+         * Allows you to use a custom
+         * org.apache.camel.builder.xml.ResultHandlerFactory which is capable of
+         * using custom org.apache.camel.builder.xml.ResultHandler types.
+         * 
+         * The option is a:
+         * <code>org.apache.camel.component.xslt.ResultHandlerFactory</code>
+         * type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder resultHandlerFactory(
+                Object resultHandlerFactory) {
+            setProperty("resultHandlerFactory", resultHandlerFactory);
+            return this;
+        }
+        /**
+         * Allows you to use a custom
+         * org.apache.camel.builder.xml.ResultHandlerFactory which is capable of
+         * using custom org.apache.camel.builder.xml.ResultHandler types.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.camel.component.xslt.ResultHandlerFactory</code>
+         * type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder resultHandlerFactory(
+                String resultHandlerFactory) {
+            setProperty("resultHandlerFactory", resultHandlerFactory);
+            return this;
+        }
+        /**
+         * To use a custom Saxon configuration.
+         * 
+         * The option is a: <code>java.lang.Object</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder saxonConfiguration(
+                Object saxonConfiguration) {
+            setProperty("saxonConfiguration", saxonConfiguration);
+            return this;
+        }
+        /**
+         * To use a custom Saxon configuration.
+         * 
+         * The option will be converted to a <code>java.lang.Object</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder saxonConfiguration(
+                String saxonConfiguration) {
+            setProperty("saxonConfiguration", saxonConfiguration);
+            return this;
+        }
+        /**
+         * Allows you to use a custom
+         * net.sf.saxon.lib.ExtensionFunctionDefinition. You would need to add
+         * camel-saxon to the classpath. The function is looked up in the
+         * registry, where you can comma to separate multiple values to lookup.
+         * 
+         * The option is a: <code>java.util.List&lt;java.lang.Object&gt;</code>
+         * type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder saxonExtensionFunctions(
+                List<Object> saxonExtensionFunctions) {
+            setProperty("saxonExtensionFunctions", saxonExtensionFunctions);
+            return this;
+        }
+        /**
+         * Allows you to use a custom
+         * net.sf.saxon.lib.ExtensionFunctionDefinition. You would need to add
+         * camel-saxon to the classpath. The function is looked up in the
+         * registry, where you can comma to separate multiple values to lookup.
+         * 
+         * The option will be converted to a
+         * <code>java.util.List&lt;java.lang.Object&gt;</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder saxonExtensionFunctions(
+                String saxonExtensionFunctions) {
+            setProperty("saxonExtensionFunctions", saxonExtensionFunctions);
+            return this;
+        }
+        /**
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder synchronous(boolean synchronous) {
+            setProperty("synchronous", synchronous);
+            return this;
+        }
+        /**
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder synchronous(String synchronous) {
+            setProperty("synchronous", synchronous);
+            return this;
+        }
+        /**
+         * To use a custom XSLT transformer factory.
+         * 
+         * The option is a: <code>javax.xml.transform.TransformerFactory</code>
+         * type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder transformerFactory(
+                Object transformerFactory) {
+            setProperty("transformerFactory", transformerFactory);
+            return this;
+        }
+        /**
+         * To use a custom XSLT transformer factory.
+         * 
+         * The option will be converted to a
+         * <code>javax.xml.transform.TransformerFactory</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder transformerFactory(
+                String transformerFactory) {
+            setProperty("transformerFactory", transformerFactory);
+            return this;
+        }
+        /**
+         * To use a custom XSLT transformer factory, specified as a FQN class
+         * name.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder transformerFactoryClass(
+                String transformerFactoryClass) {
+            setProperty("transformerFactoryClass", transformerFactoryClass);
+            return this;
+        }
+        /**
+         * To use a custom javax.xml.transform.URIResolver.
+         * 
+         * The option is a: <code>javax.xml.transform.URIResolver</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder uriResolver(Object uriResolver) {
+            setProperty("uriResolver", uriResolver);
+            return this;
+        }
+        /**
+         * To use a custom javax.xml.transform.URIResolver.
+         * 
+         * The option will be converted to a
+         * <code>javax.xml.transform.URIResolver</code> type.
+         * 
+         * Group: advanced
+         */
+        default AdvancedXJEndpointBuilder uriResolver(String uriResolver) {
+            setProperty("uriResolver", uriResolver);
+            return this;
+        }
+    }
+
+    /**
+     * Proxy enum for <code>org.apache.camel.component.xslt.XsltOutput</code>
+     * enum.
+     */
+    enum XsltOutput {
+        string,
+        bytes,
+        DOM,
+        file;
+    }
+
+    /**
+     * Proxy enum for
+     * <code>org.apache.camel.component.xj.TransformDirection</code> enum.
+     */
+    enum TransformDirection {
+        XML2JSON,
+        JSON2XML;
+    }
+    /**
+     * XJ (camel-xj)
+     * Transforms json/xml message back and forth using a XSLT.
+     * 
+     * Category: transformation
+     * Available as of version: 2.25
+     * Maven coordinates: org.apache.camel:camel-xj
+     * 
+     * Syntax: <code>xj:resourceUri</code>
+     * 
+     * Path parameter: resourceUri (required)
+     * Path to the template. The following is supported by the default
+     * URIResolver. You can prefix with: classpath, file, http, ref, or bean.
+     * classpath, file and http loads the resource using these protocols
+     * (classpath is default). ref will lookup the resource in the registry.
+     * bean will call a method on a bean to be used as the resource. For bean
+     * you can specify the method name after dot, eg bean:myBean.myMethod
+     */
+    default XJEndpointBuilder xJ(String path) {
+        class XJEndpointBuilderImpl extends AbstractEndpointBuilder implements XJEndpointBuilder, AdvancedXJEndpointBuilder {
+            public XJEndpointBuilderImpl(String path) {
+                super("xj", path);
+            }
+        }
+        return new XJEndpointBuilderImpl(path);
+    }
+}
\ No newline at end of file
diff --git a/parent/pom.xml b/parent/pom.xml
index 36067f6..46c0c22 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -2353,6 +2353,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-xj</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-xmlsecurity</artifactId>
         <version>${project.version}</version>
       </dependency>
@@ -3807,6 +3812,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-xj-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-xmlsecurity-starter</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/platforms/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml
index 3b51285..d80c1ec 100644
--- a/platforms/karaf/features/src/main/resources/features.xml
+++ b/platforms/karaf/features/src/main/resources/features.xml
@@ -2670,6 +2670,12 @@
     <bundle dependency='true'>wrap:mvn:com.github.mmazi/rescu/${rescu-version}</bundle>
     <bundle>mvn:org.apache.camel/camel-xchange/${project.version}</bundle>
   </feature>
+  <feature name='camel-xj' version='${project.version}' start-level='50'>
+    <feature version='${project.version}'>camel-core</feature>
+    <bundle dependency='true'>mvn:com.fasterxml.jackson.core/jackson-core/${jackson2-version}</bundle>
+    <bundle dependency='true'>mvn:com.fasterxml.jackson.core/jackson-databind/${jackson2-version}</bundle>
+    <bundle>mvn:org.apache.camel/camel-xj/${project.version}</bundle>
+  </feature>
   <feature name='camel-xmlsecurity' version='${project.version}' start-level='50'>
     <feature version='${project.version}'>camel-core</feature>
     <bundle dependency='true'>mvn:commons-codec/commons-codec/${commons-codec-version}</bundle>
diff --git a/platforms/spring-boot/components-starter/camel-xj-starter/pom.xml b/platforms/spring-boot/components-starter/camel-xj-starter/pom.xml
new file mode 100644
index 0000000..b1b4009
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-xj-starter/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>components-starter</artifactId>
+    <version>3.0.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>camel-xj-starter</artifactId>
+  <packaging>jar</packaging>
+  <name>Spring-Boot Starter :: Camel :: XJ</name>
+  <description>Spring-Boot Starter for Camel XJ component</description>
+  <dependencies>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter</artifactId>
+      <version>${spring-boot-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-xj</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <!--START OF GENERATED CODE-->
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-core-starter</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-spring-boot-starter</artifactId>
+    </dependency>
+    <!--END OF GENERATED CODE-->
+  </dependencies>
+</project>
diff --git a/platforms/spring-boot/components-starter/camel-xj-starter/src/main/java/org/apache/camel/component/xj/springboot/XJComponentAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-xj-starter/src/main/java/org/apache/camel/component/xj/springboot/XJComponentAutoConfiguration.java
new file mode 100644
index 0000000..a85785b
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-xj-starter/src/main/java/org/apache/camel/component/xj/springboot/XJComponentAutoConfiguration.java
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xj.springboot;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Generated;
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.xj.XJComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spi.HasId;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.CamelPropertiesHelper;
+import org.apache.camel.spring.boot.util.ConditionalOnCamelContextAndAutoConfigurationBeans;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator;
+import org.apache.camel.support.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Conditional;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+
+/**
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+@Configuration
+@Conditional({ConditionalOnCamelContextAndAutoConfigurationBeans.class,
+        XJComponentAutoConfiguration.GroupConditions.class})
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        XJComponentConfiguration.class})
+public class XJComponentAutoConfiguration {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(XJComponentAutoConfiguration.class);
+    @Autowired
+    private ApplicationContext applicationContext;
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired
+    private XJComponentConfiguration configuration;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<XJComponent>> customizers;
+
+    static class GroupConditions extends GroupCondition {
+        public GroupConditions() {
+            super("camel.component", "camel.component.xj");
+        }
+    }
+
+    @Lazy
+    @Bean(name = "xj-component")
+    @ConditionalOnMissingBean(XJComponent.class)
+    public XJComponent configureXJComponent() throws Exception {
+        XJComponent component = new XJComponent();
+        component.setCamelContext(camelContext);
+        Map<String, Object> parameters = new HashMap<>();
+        IntrospectionSupport.getProperties(configuration, parameters, null,
+                false);
+        for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+            Object value = entry.getValue();
+            Class<?> paramClass = value.getClass();
+            if (paramClass.getName().endsWith("NestedConfiguration")) {
+                Class nestedClass = null;
+                try {
+                    nestedClass = (Class) paramClass.getDeclaredField(
+                            "CAMEL_NESTED_CLASS").get(null);
+                    HashMap<String, Object> nestedParameters = new HashMap<>();
+                    IntrospectionSupport.getProperties(value, nestedParameters,
+                            null, false);
+                    Object nestedProperty = nestedClass.newInstance();
+                    CamelPropertiesHelper.setCamelProperties(camelContext,
+                            nestedProperty, nestedParameters, false);
+                    entry.setValue(nestedProperty);
+                } catch (NoSuchFieldException e) {
+                }
+            }
+        }
+        CamelPropertiesHelper.setCamelProperties(camelContext, component,
+                parameters, false);
+        if (ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<XJComponent> customizer : customizers) {
+                boolean useCustomizer = (customizer instanceof HasId)
+                        ? HierarchicalPropertiesEvaluator.evaluate(
+                                applicationContext.getEnvironment(),
+                                "camel.component.customizer",
+                                "camel.component.xj.customizer",
+                                ((HasId) customizer).getId())
+                        : HierarchicalPropertiesEvaluator.evaluate(
+                                applicationContext.getEnvironment(),
+                                "camel.component.customizer",
+                                "camel.component.xj.customizer");
+                if (useCustomizer) {
+                    LOGGER.debug("Configure component {}, with customizer {}",
+                            component, customizer);
+                    customizer.customize(component);
+                }
+            }
+        }
+        return component;
+    }
+}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-xj-starter/src/main/java/org/apache/camel/component/xj/springboot/XJComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-xj-starter/src/main/java/org/apache/camel/component/xj/springboot/XJComponentConfiguration.java
new file mode 100644
index 0000000..6550077
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-xj-starter/src/main/java/org/apache/camel/component/xj/springboot/XJComponentConfiguration.java
@@ -0,0 +1,167 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.xj.springboot;
+
+import java.util.Map;
+import javax.annotation.Generated;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * Transforms json/xml message back and forth using a XSLT.
+ * 
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+@ConfigurationProperties(prefix = "camel.component.xj")
+public class XJComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
+
+    /**
+     * Whether to enable auto configuration of the xj component. This is enabled
+     * by default.
+     */
+    private Boolean enabled;
+    /**
+     * To use a custom UriResolver which depends on a dynamic endpoint resource
+     * URI. Should not be used together with the option 'uriResolver'. The
+     * option is a org.apache.camel.component.xslt.XsltUriResolverFactory type.
+     */
+    private String uriResolverFactory;
+    /**
+     * To use a custom UriResolver. Should not be used together with the option
+     * 'uriResolverFactory'. The option is a javax.xml.transform.URIResolver
+     * type.
+     */
+    private String uriResolver;
+    /**
+     * Cache for the resource content (the stylesheet file) when it is loaded.
+     * If set to false Camel will reload the stylesheet file on each message
+     * processing. This is good for development. A cached stylesheet can be
+     * forced to reload at runtime via JMX using the clearCachedStylesheet
+     * operation.
+     */
+    private Boolean contentCache = true;
+    /**
+     * Whether to use Saxon as the transformerFactoryClass. If enabled then the
+     * class net.sf.saxon.TransformerFactoryImpl. You would need to add Saxon to
+     * the classpath.
+     */
+    private Boolean saxon = false;
+    /**
+     * Allows you to use a custom net.sf.saxon.lib.ExtensionFunctionDefinition.
+     * You would need to add camel-saxon to the classpath. The function is
+     * looked up in the registry, where you can comma to separate multiple
+     * values to lookup.
+     */
+    private String saxonExtensionFunctions;
+    /**
+     * To use a custom Saxon configuration. The option is a java.lang.Object
+     * type.
+     */
+    private String saxonConfiguration;
+    /**
+     * To set custom Saxon configuration properties
+     */
+    private Map<String, Object> saxonConfigurationProperties;
+    /**
+     * Whether the component should resolve property placeholders on itself when
+     * starting. Only properties which are of String type can use property
+     * placeholders.
+     */
+    private Boolean resolvePropertyPlaceholders = true;
+    /**
+     * Whether the component should use basic property binding (Camel 2.x) or
+     * the newer property binding with additional capabilities
+     */
+    private Boolean basicPropertyBinding = false;
+
+    public String getUriResolverFactory() {
+        return uriResolverFactory;
+    }
+
+    public void setUriResolverFactory(String uriResolverFactory) {
+        this.uriResolverFactory = uriResolverFactory;
+    }
+
+    public String getUriResolver() {
+        return uriResolver;
+    }
+
+    public void setUriResolver(String uriResolver) {
+        this.uriResolver = uriResolver;
+    }
+
+    public Boolean getContentCache() {
+        return contentCache;
+    }
+
+    public void setContentCache(Boolean contentCache) {
+        this.contentCache = contentCache;
+    }
+
+    public Boolean getSaxon() {
+        return saxon;
+    }
+
+    public void setSaxon(Boolean saxon) {
+        this.saxon = saxon;
+    }
+
+    public String getSaxonExtensionFunctions() {
+        return saxonExtensionFunctions;
+    }
+
+    public void setSaxonExtensionFunctions(String saxonExtensionFunctions) {
+        this.saxonExtensionFunctions = saxonExtensionFunctions;
+    }
+
+    public String getSaxonConfiguration() {
+        return saxonConfiguration;
+    }
+
+    public void setSaxonConfiguration(String saxonConfiguration) {
+        this.saxonConfiguration = saxonConfiguration;
+    }
+
+    public Map<String, Object> getSaxonConfigurationProperties() {
+        return saxonConfigurationProperties;
+    }
+
+    public void setSaxonConfigurationProperties(
+            Map<String, Object> saxonConfigurationProperties) {
+        this.saxonConfigurationProperties = saxonConfigurationProperties;
+    }
+
+    public Boolean getResolvePropertyPlaceholders() {
+        return resolvePropertyPlaceholders;
+    }
+
+    public void setResolvePropertyPlaceholders(
+            Boolean resolvePropertyPlaceholders) {
+        this.resolvePropertyPlaceholders = resolvePropertyPlaceholders;
+    }
+
+    public Boolean getBasicPropertyBinding() {
+        return basicPropertyBinding;
+    }
+
+    public void setBasicPropertyBinding(Boolean basicPropertyBinding) {
+        this.basicPropertyBinding = basicPropertyBinding;
+    }
+}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-xj-starter/src/main/resources/META-INF/LICENSE.txt b/platforms/spring-boot/components-starter/camel-xj-starter/src/main/resources/META-INF/LICENSE.txt
new file mode 100644
index 0000000..6b0b127
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-xj-starter/src/main/resources/META-INF/LICENSE.txt
@@ -0,0 +1,203 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git a/platforms/spring-boot/components-starter/camel-xj-starter/src/main/resources/META-INF/NOTICE.txt b/platforms/spring-boot/components-starter/camel-xj-starter/src/main/resources/META-INF/NOTICE.txt
new file mode 100644
index 0000000..2e215bf
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-xj-starter/src/main/resources/META-INF/NOTICE.txt
@@ -0,0 +1,11 @@
+   =========================================================================
+   ==  NOTICE file corresponding to the section 4 d of                    ==
+   ==  the Apache License, Version 2.0,                                   ==
+   ==  in this case for the Apache Camel distribution.                    ==
+   =========================================================================
+
+   This product includes software developed by
+   The Apache Software Foundation (http://www.apache.org/).
+
+   Please read the different LICENSE files present in the licenses directory of
+   this distribution.
diff --git a/platforms/spring-boot/components-starter/camel-xj-starter/src/main/resources/META-INF/spring.factories b/platforms/spring-boot/components-starter/camel-xj-starter/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..a3be99c
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-xj-starter/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,19 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+org.apache.camel.component.xj.springboot.XJComponentAutoConfiguration
diff --git a/platforms/spring-boot/components-starter/camel-xj-starter/src/main/resources/META-INF/spring.provides b/platforms/spring-boot/components-starter/camel-xj-starter/src/main/resources/META-INF/spring.provides
new file mode 100644
index 0000000..4cc9469
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-xj-starter/src/main/resources/META-INF/spring.provides
@@ -0,0 +1,17 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+provides: camel-xj
diff --git a/platforms/spring-boot/components-starter/pom.xml b/platforms/spring-boot/components-starter/pom.xml
index a1c5f71..0ef3590 100644
--- a/platforms/spring-boot/components-starter/pom.xml
+++ b/platforms/spring-boot/components-starter/pom.xml
@@ -379,6 +379,7 @@
     <module>camel-websocket-starter</module>
     <module>camel-wordpress-starter</module>
     <module>camel-xchange-starter</module>
+    <module>camel-xj-starter</module>
     <module>camel-xmlsecurity-starter</module>
     <module>camel-xmpp-starter</module>
     <module>camel-xpath-starter</module>
diff --git a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
index 3b8628f..33eafcc 100644
--- a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
+++ b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
@@ -3335,6 +3335,16 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-xj</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-xj-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-xmlsecurity</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelXjTest.java b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelXjTest.java
new file mode 100644
index 0000000..685086d
--- /dev/null
+++ b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelXjTest.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.itest.karaf;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.junit.PaxExam;
+
+@RunWith(PaxExam.class)
+public class CamelXjTest extends BaseKarafTest {
+
+    public static final String COMPONENT = extractName(CamelXjTest.class);
+
+    @Test
+    public void test() throws Exception {
+        testComponent(COMPONENT);
+    }
... 54 lines suppressed ...


Mime
View raw message