Get child element, inner element, outer element, parse Fragment : Fragment « Core Class « Android






Get child element, inner element, outer element, parse Fragment

  
//package com.cicadalane.androlate;

/*
 * Copyright (C) 2011 cicada.software@gmail.com
 *
 * 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.
 */


import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

class XmlUtils {

  public static List<Element> getChildrenByTagName(Element parent, String name) {
    return XmlUtils.getChildrenByTagName(parent, new String[] { name });
  }

  public static List<Element> getChildrenByTagName(Element parent,
      String[] names) {
    List<Element> nodeList = new ArrayList<Element>();
    for (Node child = parent.getFirstChild(); child != null; child = child
        .getNextSibling()) {
      if (child.getNodeType() == Node.ELEMENT_NODE) {
        for (String name : names) {
          if (name.equals(child.getNodeName())) {
            nodeList.add((Element) child);
            break;
          }
        }
      }
    }
    return nodeList;
  }

  public static Element getFirstChildByTagName(Element parent, String name) {
    List<Element> list = XmlUtils.getChildrenByTagName(parent,
        new String[] { name });
    if (list.size() > 0)
      return list.get(0);
    else
      return null;
  }

  public static String getInnerXml(Node node)
      throws ParserConfigurationException,
      TransformerFactoryConfigurationError, TransformerException {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < node.getChildNodes().getLength(); i++)
      sb.append(getOuterXml(node.getChildNodes().item(i)));
    return sb.toString();
  }

  public static String getOuterXml(Node n)
      throws ParserConfigurationException,
      TransformerFactoryConfigurationError, TransformerException {
    Transformer xformer = TransformerFactory.newInstance().newTransformer();
    xformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
    // initialize StreamResult with File object to save to file
    StreamResult result = new StreamResult(new StringWriter());
    DOMSource source = new DOMSource(n);
    xformer.transform(source, result);
    String xmlString = result.getWriter().toString();
    return xmlString;
  }

  public static DocumentFragment parseFragment(Document doc, String xml)
      throws SAXException, IOException, ParserConfigurationException {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentFragment fragment = doc.createDocumentFragment();
    String wellformedxml = "<__parseFragment__>" + xml
        + "</__parseFragment__>";
    Document fragmentdoc = dbf.newDocumentBuilder().parse(
        new InputSource(new StringReader(wellformedxml)));

    Node node = doc.importNode(fragmentdoc.getDocumentElement(), true);

    while (node.hasChildNodes()) {
      fragment.appendChild(node.removeChild(node.getFirstChild()));
    }

    return fragment;
  }

  public static void removeAllChildren(Node node) {
    while (node.hasChildNodes()) {
      node.removeChild(node.getFirstChild());
    }
  }

  public static void setInnerXml(Node node, String xml) throws SAXException,
      IOException, ParserConfigurationException {
    DocumentFragment fragment;
    fragment = XmlUtils.parseFragment(node.getOwnerDocument(), xml);
    XmlUtils.removeAllChildren(node);
    node.appendChild(fragment);
    return;
  }

  /*
   * save a XML Document to a file
   */
  public static void writeXmlFile(Document doc, String filename)
      throws TransformerConfigurationException, TransformerException,
      IOException {
    writeXmlFile(doc, filename, true);
  }

  public static void writeXmlFile(Document doc, String filename,
      boolean indent) throws TransformerConfigurationException,
      TransformerException, IOException {

    Source source = new DOMSource(doc);

    FileOutputStream outputStream = new FileOutputStream(filename);
    Result result = new StreamResult(new OutputStreamWriter(outputStream,
        "UTF8"));

    doc.setXmlStandalone(true);
    // Write the DOM document to the file
    TransformerFactory factory = TransformerFactory.newInstance();
    factory.setAttribute("indent-number", 4);

    Transformer xformer = factory.newTransformer();
    xformer.setOutputProperty(OutputKeys.INDENT, "yes");
    xformer.setOutputProperty(OutputKeys.METHOD, "xml");
    xformer.setOutputProperty(OutputKeys.ENCODING, "UTF8");
    xformer.transform(source, result);
  }
}

   
    
  








Related examples in the same category

1.extends Fragment
2.Demonstration of hiding and showing fragments.
3.Demonstration of using ListFragment to show a list of items from a canned array.
4.Fragment Stack
5.Use Fragment to propagate state across activity instances when an activity needs to be restarted due to a configuration change.
6.extends Fragment to display result
7.Demonstration of PreferenceFragment, showing a single fragment in an activity.