+++ /dev/null
-/*--------------------------------------------------------------------------\r
- * Copyright 2004 Taro L. Saito\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- *--------------------------------------------------------------------------*/\r
-//--------------------------------------\r
-// XerialJ\r
-//\r
-// DOMBuilder.java\r
-// Since: 2004/12/21\r
-//\r
-// $URL: http://www.xerial.org/svn/project/XerialJ/trunk/xerial-core/src/main/java/org/xerial/util/xml/pullparser/DOMBuilder.java $ \r
-// $Author: leo $\r
-//--------------------------------------\r
-package org.xerial.util.xml.pullparser;\r
-\r
-import static org.xmlpull.v1.XmlPullParser.END_TAG;\r
-import static org.xmlpull.v1.XmlPullParser.START_TAG;\r
-import static org.xmlpull.v1.XmlPullParser.TEXT;\r
-\r
-import java.io.IOException;\r
-import java.io.Reader;\r
-\r
-import javax.xml.parsers.DocumentBuilder;\r
-import javax.xml.parsers.DocumentBuilderFactory;\r
-import javax.xml.parsers.ParserConfigurationException;\r
-\r
-import org.w3c.dom.Document;\r
-import org.w3c.dom.Element;\r
-import org.w3c.dom.Text;\r
-import org.xerial.util.xml.XMLErrorCode;\r
-import org.xerial.util.xml.XMLException;\r
-import org.xmlpull.v1.XmlPullParser;\r
-import org.xmlpull.v1.XmlPullParserException;\r
-import org.xmlpull.v1.XmlPullParserFactory;\r
-\r
-/**\r
- * DOMBuilder generates DOM elements from an input XML data.\r
- * PROCESSING_INSTRUCTION and COMMENT will be ignored.\r
- * \r
- * @author leo\r
- * \r
- */\r
-public class DOMBuilder\r
-{\r
- public DOMBuilder()\r
- {\r
- // do nothing\r
- }\r
-\r
- public Element parse(Reader xmlReader) throws XmlPullParserException, IOException, XMLException\r
- {\r
- XmlPullParserFactory parserFactory = XmlPullParserFactory.newInstance();\r
- XmlPullParser parser = parserFactory.newPullParser();\r
- //parser.setFeature(FEATURE_PROCESS_NAMESPACES, true);\r
- parser.setInput(xmlReader);\r
- parser.next();\r
- return parse(parser);\r
- }\r
-\r
- public Element parse(XmlPullParser pullParser) throws XMLException, IOException\r
- {\r
- return parseSubTree(pullParser);\r
- }\r
-\r
- protected Element parseSubTree(XmlPullParser pullParser) throws XMLException, IOException\r
- {\r
- Document document = createNewDOMDocument();\r
- try\r
- {\r
- return parseElement(pullParser, document);\r
- }\r
- catch (XmlPullParserException e)\r
- {\r
- throw new XMLException(XMLErrorCode.PARSE_ERROR, e);\r
- }\r
- }\r
-\r
- protected Element parseElement(XmlPullParser pullParser, Document document) throws XmlPullParserException,\r
- IOException, XMLException\r
- {\r
- pullParser.require(START_TAG, null, null); // we cannot start parsing of an element from other than START_TAG\r
- String tagName = pullParser.getName();\r
- //String nameSpace = pullParser.getNamespace();\r
- //String prefix = pullParser.getPrefix();\r
- //String qName = prefix != null ? prefix + ":" + tagName : tagName;\r
- String qName = tagName;\r
- Element element = document.createElement(qName);\r
-\r
- // read attributes\r
- for (int i = 0; i < pullParser.getAttributeCount(); i++)\r
- {\r
- //String attributeNameSpace = pullParser.getAttributeNamespace(i);\r
- String attributeName = pullParser.getAttributeName(i);\r
- String attributeValue = pullParser.getAttributeValue(i);\r
- element.setAttribute(attributeName, attributeValue);\r
- // if(attributeNameSpace == null || attributeNameSpace.length() == 0)\r
- // {\r
- // element.setAttribute(attributeName, attributeValue);\r
- // }\r
- // else\r
- // {\r
- // String attributePrefix = pullParser.getAttributePrefix(i);\r
- // String attributeQName = createQName(attributePrefix, attributeName);\r
- // element.setAttributeNS(attributeNameSpace, attributeQName, attributeValue);\r
- // }\r
- }\r
-\r
- // read child nodes\r
- while (pullParser.next() != END_TAG)\r
- {\r
- switch (pullParser.getEventType())\r
- {\r
- case START_TAG:\r
- Element childElement = parseElement(pullParser, document);\r
- element.appendChild(childElement);\r
- break;\r
- case TEXT:\r
- String text = pullParser.getText();\r
- Text textElement = document.createTextNode(text);\r
- element.appendChild(textElement);\r
- break;\r
- default: // END_DOCUMENT, etc\r
- throw new XMLException(XMLErrorCode.INVALID_XML_STRUCTURE, "line " + pullParser.getLineNumber()\r
- + ": tag <" + qName + "> is not closed");\r
- }\r
- }\r
-\r
- pullParser.require(END_TAG, null, tagName);\r
- return element;\r
- }\r
-\r
- protected String createQName(String prefix, String name)\r
- {\r
- return prefix == null ? name : prefix + ":" + name;\r
- }\r
-\r
- protected Document createNewDOMDocument() throws XMLException\r
- {\r
- try\r
- {\r
- DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();\r
- DocumentBuilder docBuilder = builderFactory.newDocumentBuilder();\r
- return docBuilder.newDocument();\r
- }\r
- catch (ParserConfigurationException e)\r
- {\r
- throw new XMLException(XMLErrorCode.INVALID_PARSER_CONFIGURATION, e);\r
- }\r
- }\r
-\r
-}\r