/*
 * 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.
 */
  <?firstPi customKey="something"?>
  firstPi
  customKey="something"
  <?secondPi secondPiData?>
  secondPi
  secondPiData
2
p
 customKey="something"

<ns1:e11 xmlns:ns1="http://www.foo.com/ns1/">text1</ns1:e11><ns1:e11 xmlns:ns1="http://www.foo.com/ns1/">text2</ns1:e11>
<ns1:e12 xmlns:ns1="http://www.foo.com/ns1/"><![CDATA[cdata-section1]]></ns1:e12><ns1:e12 xmlns:ns1="http://www.foo.com/ns1/"><![CDATA[cdata-section2<&]]></ns1:e12>
<ns1:e1 xmlns:ns1="http://www.foo.com/ns1/" a1="v1" a2="v2">
    <ns1:e11>text1</ns1:e11>
    <ns1:e12><![CDATA[cdata-section1]]></ns1:e12>
  </ns1:e1>
<ns1:e11 xmlns:ns1="http://www.foo.com/ns1/">text1</ns1:e11><ns1:e11 xmlns:ns1="http://www.foo.com/ns1/">text2</ns1:e11>
a1
v2
rootroot
root
  root
  e1
  e11
  e12
  e2
  e11
  e12
  root
  root
  e1
  root
  e1
  e11
  root
  e1
  e12
  root
  e2
  root
  e2
  e11
  root
  e2
  e12
cdata-section2&lt;&amp;
cdata-section2<&
