<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FXML%2FXPath</id>
		<title>Java Tutorial/XML/XPath - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FXML%2FXPath"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/XML/XPath&amp;action=history"/>
		<updated>2026-04-16T21:21:03Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/XML/XPath&amp;diff=5112&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/XML/XPath&amp;diff=5112&amp;oldid=prev"/>
				<updated>2010-06-01T05:17:56Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 05:17, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/XML/XPath&amp;diff=5111&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/XML/XPath&amp;diff=5111&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:27Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  Get and set value through XPath ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.FileReader;&lt;br /&gt;
import javax.xml.xpath.XPath;&lt;br /&gt;
import javax.xml.xpath.XPathConstants;&lt;br /&gt;
import javax.xml.xpath.XPathFactory;&lt;br /&gt;
import org.w3c.dom.Attr;&lt;br /&gt;
import org.xml.sax.InputSource;&lt;br /&gt;
public class GetNameAsAttr {&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    XPathFactory factory = XPathFactory.newInstance();&lt;br /&gt;
    XPath xPath = factory.newXPath();&lt;br /&gt;
    Attr result = (Attr) xPath.evaluate(&amp;quot;/schedule/@name&amp;quot;, new InputSource(&lt;br /&gt;
        new FileReader(&amp;quot;tds.xml&amp;quot;)), XPathConstants.NODE);&lt;br /&gt;
    System.out.println(result.getValue());&lt;br /&gt;
    result.setValue(&amp;quot;The Colbert Report&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Get integer value ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.FileReader;&lt;br /&gt;
import javax.xml.xpath.XPath;&lt;br /&gt;
import javax.xml.xpath.XPathConstants;&lt;br /&gt;
import javax.xml.xpath.XPathFactory;&lt;br /&gt;
import org.xml.sax.InputSource;&lt;br /&gt;
public class GuestListCounter {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        XPathFactory factory = XPathFactory.newInstance();&lt;br /&gt;
        XPath xPath = factory.newXPath();&lt;br /&gt;
        Number shows = (Number) xPath.evaluate(&amp;quot;count(/schedule/show)&amp;quot;,&lt;br /&gt;
                new InputSource(new FileReader(&amp;quot;tds.xml&amp;quot;)),&lt;br /&gt;
                XPathConstants.NUMBER);&lt;br /&gt;
        System.out.println(&amp;quot;Document has &amp;quot; + shows.intValue() + &amp;quot; shows.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Get the String data associated with the XPath selection supplied ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 Milyn - Copyright (C) 2006&lt;br /&gt;
 This library is free software; you can redistribute it and/or&lt;br /&gt;
 modify it under the terms of the GNU Lesser General Public&lt;br /&gt;
 License (version 2.1) as published by the Free Software &lt;br /&gt;
 Foundation.&lt;br /&gt;
 This library is distributed in the hope that it will be useful,&lt;br /&gt;
 but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  &lt;br /&gt;
 &lt;br /&gt;
 See the GNU Lesser General Public License for more details:    &lt;br /&gt;
 http://www.gnu.org/licenses/lgpl.txt&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.w3c.dom.Attr;&lt;br /&gt;
import org.w3c.dom.DOMException;&lt;br /&gt;
import org.w3c.dom.Document;&lt;br /&gt;
import org.w3c.dom.Node;&lt;br /&gt;
import org.w3c.dom.NodeList;&lt;br /&gt;
import org.xml.sax.EntityResolver;&lt;br /&gt;
import org.xml.sax.ErrorHandler;&lt;br /&gt;
import org.xml.sax.InputSource;&lt;br /&gt;
import org.xml.sax.SAXException;&lt;br /&gt;
import org.xml.sax.SAXParseException;&lt;br /&gt;
&lt;br /&gt;
import javax.xml.XMLConstants;&lt;br /&gt;
import javax.xml.parsers.DocumentBuilder;&lt;br /&gt;
import javax.xml.parsers.DocumentBuilderFactory;&lt;br /&gt;
import javax.xml.parsers.FactoryConfigurationError;&lt;br /&gt;
import javax.xml.parsers.ParserConfigurationException;&lt;br /&gt;
import javax.xml.transform.OutputKeys;&lt;br /&gt;
import javax.xml.transform.Transformer;&lt;br /&gt;
import javax.xml.transform.TransformerFactory;&lt;br /&gt;
import javax.xml.transform.dom.DOMSource;&lt;br /&gt;
import javax.xml.transform.stream.StreamResult;&lt;br /&gt;
import javax.xml.transform.stream.StreamSource;&lt;br /&gt;
import javax.xml.validation.Schema;&lt;br /&gt;
import javax.xml.validation.SchemaFactory;&lt;br /&gt;
import javax.xml.xpath.XPath;&lt;br /&gt;
import javax.xml.xpath.XPathConstants;&lt;br /&gt;
import javax.xml.xpath.XPathExpressionException;&lt;br /&gt;
import javax.xml.xpath.XPathFactory;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStream;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.io.Reader;&lt;br /&gt;
import java.io.StringReader;&lt;br /&gt;
import java.io.StringWriter;&lt;br /&gt;
import java.io.Writer;&lt;br /&gt;
/**&lt;br /&gt;
 * XMl utility methods.&lt;br /&gt;
 *&lt;br /&gt;
 * @author Tom Fennelly&lt;br /&gt;
 */&lt;br /&gt;
public class XmlUtil {&lt;br /&gt;
    /**&lt;br /&gt;
     * Document validation types.&lt;br /&gt;
     */&lt;br /&gt;
    public static enum VALIDATION_TYPE {&lt;br /&gt;
        /**&lt;br /&gt;
         * No validation.&lt;br /&gt;
         */&lt;br /&gt;
        NONE,&lt;br /&gt;
        /**&lt;br /&gt;
         * DTD based validation.&lt;br /&gt;
         */&lt;br /&gt;
        DTD,&lt;br /&gt;
        /**&lt;br /&gt;
         * XSD based validation.&lt;br /&gt;
         */&lt;br /&gt;
        XSD,&lt;br /&gt;
    }&lt;br /&gt;
    private static String ELEMENT_NAME_FUNC = &amp;quot;/name()&amp;quot;;&lt;br /&gt;
    private static XPathFactory xPathFactory = XPathFactory.newInstance();&lt;br /&gt;
    /**&lt;br /&gt;
     * Get the String data associated with the XPath selection supplied.&lt;br /&gt;
     *&lt;br /&gt;
     * @param node  The node to be searched.&lt;br /&gt;
     * @param xpath The XPath String to be used in the selection.&lt;br /&gt;
     * @return The string data located at the specified location in the&lt;br /&gt;
     *         document, or an empty string for an empty resultset query.&lt;br /&gt;
     */&lt;br /&gt;
    public static String getString(Node node, String xpath) {&lt;br /&gt;
        NodeList nodeList = getNodeList(node, xpath);&lt;br /&gt;
        if (nodeList == null || nodeList.getLength() == 0) {&lt;br /&gt;
            return &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if (xpath.endsWith(ELEMENT_NAME_FUNC)) {&lt;br /&gt;
            if (nodeList.getLength() &amp;gt; 0) {&lt;br /&gt;
                return nodeList.item(0).getNodeName();&lt;br /&gt;
            } else {&lt;br /&gt;
                return &amp;quot;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            return serialize(nodeList);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Serialise the supplied W3C DOM subtree.&lt;br /&gt;
     * &amp;lt;p/&amp;gt;&lt;br /&gt;
     * The output is unformatted.&lt;br /&gt;
     *&lt;br /&gt;
     * @param nodeList The DOM subtree as a NodeList.&lt;br /&gt;
     * @return The subtree in serailised form.&lt;br /&gt;
     * @throws DOMException Unable to serialise the DOM.&lt;br /&gt;
     */&lt;br /&gt;
    public static String serialize(NodeList nodeList) throws DOMException {&lt;br /&gt;
        return serialize(nodeList, false);&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Serialise the supplied W3C DOM subtree.&lt;br /&gt;
     *&lt;br /&gt;
     * @param node The DOM node to be serialized.&lt;br /&gt;
     * @param format Format the output.&lt;br /&gt;
     * @return The subtree in serailised form.&lt;br /&gt;
     * @throws DOMException Unable to serialise the DOM.&lt;br /&gt;
     */&lt;br /&gt;
    public static String serialize(final Node node, boolean format) throws DOMException {&lt;br /&gt;
        StringWriter writer = new StringWriter();&lt;br /&gt;
        serialize(node, format, writer);&lt;br /&gt;
        return writer.toString();&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Serialise the supplied W3C DOM subtree.&lt;br /&gt;
     *&lt;br /&gt;
     * @param node The DOM node to be serialized.&lt;br /&gt;
     * @param format Format the output.&lt;br /&gt;
     * @param writer The target writer for serialization.&lt;br /&gt;
     * @throws DOMException Unable to serialise the DOM.&lt;br /&gt;
     */&lt;br /&gt;
    public static void serialize(final Node node, boolean format, Writer writer) throws DOMException {&lt;br /&gt;
        if(node.getNodeType() == Node.DOCUMENT_NODE) {&lt;br /&gt;
            serialize(node.getChildNodes(), format, writer);&lt;br /&gt;
        } else {&lt;br /&gt;
            serialize(new NodeList() {&lt;br /&gt;
                public Node item(int index) {&lt;br /&gt;
                    return node;&lt;br /&gt;
                }&lt;br /&gt;
                public int getLength() {&lt;br /&gt;
                    return 1;&lt;br /&gt;
                }&lt;br /&gt;
            }, format, writer);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Serialise the supplied W3C DOM subtree.&lt;br /&gt;
     *&lt;br /&gt;
     * @param nodeList The DOM subtree as a NodeList.&lt;br /&gt;
     * @param format Format the output.&lt;br /&gt;
     * @return The subtree in serailised form.&lt;br /&gt;
     * @throws DOMException Unable to serialise the DOM.&lt;br /&gt;
     */&lt;br /&gt;
    public static String serialize(NodeList nodeList, boolean format) throws DOMException {&lt;br /&gt;
        StringWriter writer = new StringWriter();&lt;br /&gt;
        serialize(nodeList, format, writer);&lt;br /&gt;
        return writer.toString();&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Serialise the supplied W3C DOM subtree.&lt;br /&gt;
     *&lt;br /&gt;
     * @param nodeList The DOM subtree as a NodeList.&lt;br /&gt;
     * @param format Format the output.&lt;br /&gt;
     * @param writer The target writer for serialization.&lt;br /&gt;
     * @throws DOMException Unable to serialise the DOM.&lt;br /&gt;
     */&lt;br /&gt;
    public static void serialize(NodeList nodeList, boolean format, Writer writer) throws DOMException {&lt;br /&gt;
        if (nodeList == null) {&lt;br /&gt;
            throw new IllegalArgumentException(&lt;br /&gt;
                    &amp;quot;null &amp;quot;subtree&amp;quot; NodeIterator arg in method call.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        try {&lt;br /&gt;
            TransformerFactory factory = TransformerFactory.newInstance();&lt;br /&gt;
            Transformer transformer;&lt;br /&gt;
            if(format) {&lt;br /&gt;
                try {&lt;br /&gt;
                    factory.setAttribute(&amp;quot;indent-number&amp;quot;, new Integer(4));&lt;br /&gt;
                } catch(Exception e) {&lt;br /&gt;
                    // Ignore... Xalan may throw on this!!&lt;br /&gt;
                    // We handle Xalan indentation below (yeuckkk) ...&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            transformer = factory.newTransformer();&lt;br /&gt;
            transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, &amp;quot;yes&amp;quot;);&lt;br /&gt;
            if(format) {&lt;br /&gt;
                transformer.setOutputProperty(OutputKeys.INDENT, &amp;quot;yes&amp;quot;);&lt;br /&gt;
                transformer.setOutputProperty(&amp;quot;{http://xml.apache.org/xalan}indent-amount&amp;quot;, &amp;quot;4&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            int listLength = nodeList.getLength();&lt;br /&gt;
            // Iterate through the Node List.&lt;br /&gt;
            for (int i = 0; i &amp;lt; listLength; i++) {&lt;br /&gt;
                Node node = nodeList.item(i);&lt;br /&gt;
                if (isTextNode(node)) {&lt;br /&gt;
                    writer.write(node.getNodeValue());&lt;br /&gt;
                } else if (node.getNodeType() == Node.ATTRIBUTE_NODE) {&lt;br /&gt;
                    writer.write(((Attr) node).getValue());&lt;br /&gt;
                } else if (node.getNodeType() == Node.ELEMENT_NODE) {&lt;br /&gt;
                    transformer.transform(new DOMSource(node), new StreamResult(writer));&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        } catch (Exception e) {&lt;br /&gt;
            DOMException domExcep = new DOMException(&lt;br /&gt;
                    DOMException.INVALID_ACCESS_ERR,&lt;br /&gt;
                    &amp;quot;Unable to serailise DOM subtree.&amp;quot;);&lt;br /&gt;
            domExcep.initCause(e);&lt;br /&gt;
            throw domExcep;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Is the supplied W3C DOM Node a text node.&lt;br /&gt;
     *&lt;br /&gt;
     * @param node The node to be tested.&lt;br /&gt;
     * @return True if the node is a text node, otherwise false.&lt;br /&gt;
     */&lt;br /&gt;
    public static boolean isTextNode(Node node) {&lt;br /&gt;
        short nodeType;&lt;br /&gt;
        if (node == null) {&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
        nodeType = node.getNodeType();&lt;br /&gt;
        return nodeType == Node.CDATA_SECTION_NODE&lt;br /&gt;
                || nodeType == Node.TEXT_NODE;&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Get the W3C NodeList instance associated with the XPath selection&lt;br /&gt;
     * supplied.&lt;br /&gt;
     *&lt;br /&gt;
     * @param node  The document node to be searched.&lt;br /&gt;
     * @param xpath The XPath String to be used in the selection.&lt;br /&gt;
     * @return The W3C NodeList instance at the specified location in the&lt;br /&gt;
     *         document, or null.&lt;br /&gt;
     */&lt;br /&gt;
    public static NodeList getNodeList(Node node, String xpath) {&lt;br /&gt;
        if (node == null) {&lt;br /&gt;
            throw new IllegalArgumentException(&lt;br /&gt;
                    &amp;quot;null &amp;quot;document&amp;quot; arg in method call.&amp;quot;);&lt;br /&gt;
        } else if (xpath == null) {&lt;br /&gt;
            throw new IllegalArgumentException(&lt;br /&gt;
                    &amp;quot;null &amp;quot;xpath&amp;quot; arg in method call.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        try {&lt;br /&gt;
            XPath xpathEvaluater = xPathFactory.newXPath();&lt;br /&gt;
            if (xpath.endsWith(ELEMENT_NAME_FUNC)) {&lt;br /&gt;
                return (NodeList) xpathEvaluater.evaluate(xpath.substring(0,&lt;br /&gt;
                        xpath.length() - ELEMENT_NAME_FUNC.length()), node,&lt;br /&gt;
                        XPathConstants.NODESET);&lt;br /&gt;
            } else {&lt;br /&gt;
                return (NodeList) xpathEvaluater.evaluate(xpath, node,&lt;br /&gt;
                        XPathConstants.NODESET);&lt;br /&gt;
            }&lt;br /&gt;
        } catch (XPathExpressionException e) {&lt;br /&gt;
            throw new IllegalArgumentException(&amp;quot;bad &amp;quot;xpath&amp;quot; expression [&amp;quot;&lt;br /&gt;
                    + xpath + &amp;quot;].&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Get the W3C Node instance associated with the XPath selection supplied ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 Milyn - Copyright (C) 2006&lt;br /&gt;
 This library is free software; you can redistribute it and/or&lt;br /&gt;
 modify it under the terms of the GNU Lesser General Public&lt;br /&gt;
 License (version 2.1) as published by the Free Software &lt;br /&gt;
 Foundation.&lt;br /&gt;
 This library is distributed in the hope that it will be useful,&lt;br /&gt;
 but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  &lt;br /&gt;
 &lt;br /&gt;
 See the GNU Lesser General Public License for more details:    &lt;br /&gt;
 http://www.gnu.org/licenses/lgpl.txt&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.w3c.dom.Attr;&lt;br /&gt;
import org.w3c.dom.DOMException;&lt;br /&gt;
import org.w3c.dom.Document;&lt;br /&gt;
import org.w3c.dom.Node;&lt;br /&gt;
import org.w3c.dom.NodeList;&lt;br /&gt;
import org.xml.sax.EntityResolver;&lt;br /&gt;
import org.xml.sax.ErrorHandler;&lt;br /&gt;
import org.xml.sax.InputSource;&lt;br /&gt;
import org.xml.sax.SAXException;&lt;br /&gt;
import org.xml.sax.SAXParseException;&lt;br /&gt;
&lt;br /&gt;
import javax.xml.XMLConstants;&lt;br /&gt;
import javax.xml.parsers.DocumentBuilder;&lt;br /&gt;
import javax.xml.parsers.DocumentBuilderFactory;&lt;br /&gt;
import javax.xml.parsers.FactoryConfigurationError;&lt;br /&gt;
import javax.xml.parsers.ParserConfigurationException;&lt;br /&gt;
import javax.xml.transform.OutputKeys;&lt;br /&gt;
import javax.xml.transform.Transformer;&lt;br /&gt;
import javax.xml.transform.TransformerFactory;&lt;br /&gt;
import javax.xml.transform.dom.DOMSource;&lt;br /&gt;
import javax.xml.transform.stream.StreamResult;&lt;br /&gt;
import javax.xml.transform.stream.StreamSource;&lt;br /&gt;
import javax.xml.validation.Schema;&lt;br /&gt;
import javax.xml.validation.SchemaFactory;&lt;br /&gt;
import javax.xml.xpath.XPath;&lt;br /&gt;
import javax.xml.xpath.XPathConstants;&lt;br /&gt;
import javax.xml.xpath.XPathExpressionException;&lt;br /&gt;
import javax.xml.xpath.XPathFactory;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStream;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.io.Reader;&lt;br /&gt;
import java.io.StringReader;&lt;br /&gt;
import java.io.StringWriter;&lt;br /&gt;
import java.io.Writer;&lt;br /&gt;
/**&lt;br /&gt;
 * XMl utility methods.&lt;br /&gt;
 *&lt;br /&gt;
 * @author Tom Fennelly&lt;br /&gt;
 */&lt;br /&gt;
public class XmlUtil {&lt;br /&gt;
    /**&lt;br /&gt;
     * Document validation types.&lt;br /&gt;
     */&lt;br /&gt;
    public static enum VALIDATION_TYPE {&lt;br /&gt;
        /**&lt;br /&gt;
         * No validation.&lt;br /&gt;
         */&lt;br /&gt;
        NONE,&lt;br /&gt;
        /**&lt;br /&gt;
         * DTD based validation.&lt;br /&gt;
         */&lt;br /&gt;
        DTD,&lt;br /&gt;
        /**&lt;br /&gt;
         * XSD based validation.&lt;br /&gt;
         */&lt;br /&gt;
        XSD,&lt;br /&gt;
    }&lt;br /&gt;
    private static String ELEMENT_NAME_FUNC = &amp;quot;/name()&amp;quot;;&lt;br /&gt;
    private static XPathFactory xPathFactory = XPathFactory.newInstance();&lt;br /&gt;
    /**&lt;br /&gt;
     * Get the W3C Node instance associated with the XPath selection supplied.&lt;br /&gt;
     *&lt;br /&gt;
     * @param node  The document node to be searched.&lt;br /&gt;
     * @param xpath The XPath String to be used in the selection.&lt;br /&gt;
     * @return The W3C Node instance at the specified location in the document,&lt;br /&gt;
     *         or null.&lt;br /&gt;
     */&lt;br /&gt;
    public static Node getNode(Node node, String xpath) {&lt;br /&gt;
        NodeList nodeList = getNodeList(node, xpath);&lt;br /&gt;
        if (nodeList == null || nodeList.getLength() == 0) {&lt;br /&gt;
            return null;&lt;br /&gt;
        } else {&lt;br /&gt;
            return nodeList.item(0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Get the W3C NodeList instance associated with the XPath selection&lt;br /&gt;
     * supplied.&lt;br /&gt;
     *&lt;br /&gt;
     * @param node  The document node to be searched.&lt;br /&gt;
     * @param xpath The XPath String to be used in the selection.&lt;br /&gt;
     * @return The W3C NodeList instance at the specified location in the&lt;br /&gt;
     *         document, or null.&lt;br /&gt;
     */&lt;br /&gt;
    public static NodeList getNodeList(Node node, String xpath) {&lt;br /&gt;
        if (node == null) {&lt;br /&gt;
            throw new IllegalArgumentException(&lt;br /&gt;
                    &amp;quot;null &amp;quot;document&amp;quot; arg in method call.&amp;quot;);&lt;br /&gt;
        } else if (xpath == null) {&lt;br /&gt;
            throw new IllegalArgumentException(&lt;br /&gt;
                    &amp;quot;null &amp;quot;xpath&amp;quot; arg in method call.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        try {&lt;br /&gt;
            XPath xpathEvaluater = xPathFactory.newXPath();&lt;br /&gt;
            if (xpath.endsWith(ELEMENT_NAME_FUNC)) {&lt;br /&gt;
                return (NodeList) xpathEvaluater.evaluate(xpath.substring(0,&lt;br /&gt;
                        xpath.length() - ELEMENT_NAME_FUNC.length()), node,&lt;br /&gt;
                        XPathConstants.NODESET);&lt;br /&gt;
            } else {&lt;br /&gt;
                return (NodeList) xpathEvaluater.evaluate(xpath, node,&lt;br /&gt;
                        XPathConstants.NODESET);&lt;br /&gt;
            }&lt;br /&gt;
        } catch (XPathExpressionException e) {&lt;br /&gt;
            throw new IllegalArgumentException(&amp;quot;bad &amp;quot;xpath&amp;quot; expression [&amp;quot;&lt;br /&gt;
                    + xpath + &amp;quot;].&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Get the W3C NodeList instance associated with the XPath selection supplied ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 Milyn - Copyright (C) 2006&lt;br /&gt;
 This library is free software; you can redistribute it and/or&lt;br /&gt;
 modify it under the terms of the GNU Lesser General Public&lt;br /&gt;
 License (version 2.1) as published by the Free Software &lt;br /&gt;
 Foundation.&lt;br /&gt;
 This library is distributed in the hope that it will be useful,&lt;br /&gt;
 but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  &lt;br /&gt;
 &lt;br /&gt;
 See the GNU Lesser General Public License for more details:    &lt;br /&gt;
 http://www.gnu.org/licenses/lgpl.txt&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.w3c.dom.Attr;&lt;br /&gt;
import org.w3c.dom.DOMException;&lt;br /&gt;
import org.w3c.dom.Document;&lt;br /&gt;
import org.w3c.dom.Node;&lt;br /&gt;
import org.w3c.dom.NodeList;&lt;br /&gt;
import org.xml.sax.EntityResolver;&lt;br /&gt;
import org.xml.sax.ErrorHandler;&lt;br /&gt;
import org.xml.sax.InputSource;&lt;br /&gt;
import org.xml.sax.SAXException;&lt;br /&gt;
import org.xml.sax.SAXParseException;&lt;br /&gt;
&lt;br /&gt;
import javax.xml.XMLConstants;&lt;br /&gt;
import javax.xml.parsers.DocumentBuilder;&lt;br /&gt;
import javax.xml.parsers.DocumentBuilderFactory;&lt;br /&gt;
import javax.xml.parsers.FactoryConfigurationError;&lt;br /&gt;
import javax.xml.parsers.ParserConfigurationException;&lt;br /&gt;
import javax.xml.transform.OutputKeys;&lt;br /&gt;
import javax.xml.transform.Transformer;&lt;br /&gt;
import javax.xml.transform.TransformerFactory;&lt;br /&gt;
import javax.xml.transform.dom.DOMSource;&lt;br /&gt;
import javax.xml.transform.stream.StreamResult;&lt;br /&gt;
import javax.xml.transform.stream.StreamSource;&lt;br /&gt;
import javax.xml.validation.Schema;&lt;br /&gt;
import javax.xml.validation.SchemaFactory;&lt;br /&gt;
import javax.xml.xpath.XPath;&lt;br /&gt;
import javax.xml.xpath.XPathConstants;&lt;br /&gt;
import javax.xml.xpath.XPathExpressionException;&lt;br /&gt;
import javax.xml.xpath.XPathFactory;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStream;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.io.Reader;&lt;br /&gt;
import java.io.StringReader;&lt;br /&gt;
import java.io.StringWriter;&lt;br /&gt;
import java.io.Writer;&lt;br /&gt;
/**&lt;br /&gt;
 * XMl utility methods.&lt;br /&gt;
 *&lt;br /&gt;
 * @author Tom Fennelly&lt;br /&gt;
 */&lt;br /&gt;
public class XmlUtil {&lt;br /&gt;
    /**&lt;br /&gt;
     * Document validation types.&lt;br /&gt;
     */&lt;br /&gt;
    public static enum VALIDATION_TYPE {&lt;br /&gt;
        /**&lt;br /&gt;
         * No validation.&lt;br /&gt;
         */&lt;br /&gt;
        NONE,&lt;br /&gt;
        /**&lt;br /&gt;
         * DTD based validation.&lt;br /&gt;
         */&lt;br /&gt;
        DTD,&lt;br /&gt;
        /**&lt;br /&gt;
         * XSD based validation.&lt;br /&gt;
         */&lt;br /&gt;
        XSD,&lt;br /&gt;
    }&lt;br /&gt;
    private static String ELEMENT_NAME_FUNC = &amp;quot;/name()&amp;quot;;&lt;br /&gt;
    private static XPathFactory xPathFactory = XPathFactory.newInstance();&lt;br /&gt;
    /**&lt;br /&gt;
     * Get the W3C NodeList instance associated with the XPath selection&lt;br /&gt;
     * supplied.&lt;br /&gt;
     *&lt;br /&gt;
     * @param node  The document node to be searched.&lt;br /&gt;
     * @param xpath The XPath String to be used in the selection.&lt;br /&gt;
     * @return The W3C NodeList instance at the specified location in the&lt;br /&gt;
     *         document, or null.&lt;br /&gt;
     */&lt;br /&gt;
    public static NodeList getNodeList(Node node, String xpath) {&lt;br /&gt;
        if (node == null) {&lt;br /&gt;
            throw new IllegalArgumentException(&lt;br /&gt;
                    &amp;quot;null &amp;quot;document&amp;quot; arg in method call.&amp;quot;);&lt;br /&gt;
        } else if (xpath == null) {&lt;br /&gt;
            throw new IllegalArgumentException(&lt;br /&gt;
                    &amp;quot;null &amp;quot;xpath&amp;quot; arg in method call.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        try {&lt;br /&gt;
            XPath xpathEvaluater = xPathFactory.newXPath();&lt;br /&gt;
            if (xpath.endsWith(ELEMENT_NAME_FUNC)) {&lt;br /&gt;
                return (NodeList) xpathEvaluater.evaluate(xpath.substring(0,&lt;br /&gt;
                        xpath.length() - ELEMENT_NAME_FUNC.length()), node,&lt;br /&gt;
                        XPathConstants.NODESET);&lt;br /&gt;
            } else {&lt;br /&gt;
                return (NodeList) xpathEvaluater.evaluate(xpath, node,&lt;br /&gt;
                        XPathConstants.NODESET);&lt;br /&gt;
            }&lt;br /&gt;
        } catch (XPathExpressionException e) {&lt;br /&gt;
            throw new IllegalArgumentException(&amp;quot;bad &amp;quot;xpath&amp;quot; expression [&amp;quot;&lt;br /&gt;
                    + xpath + &amp;quot;].&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Parse with XPath ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import javax.xml.xpath.XPath;&lt;br /&gt;
import javax.xml.xpath.XPathConstants;&lt;br /&gt;
import javax.xml.xpath.XPathFactory;&lt;br /&gt;
import org.w3c.dom.NodeList;&lt;br /&gt;
import org.xml.sax.InputSource;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    XPath xpath = XPathFactory.newInstance().newXPath();&lt;br /&gt;
    String xpathExpression = &amp;quot;/howto/topic/@name&amp;quot;;&lt;br /&gt;
    InputSource inputSource = new InputSource(&amp;quot;howto.xml&amp;quot;);&lt;br /&gt;
    NodeList nodes = (NodeList) xpath&lt;br /&gt;
        .evaluate(xpathExpression, inputSource, XPathConstants.NODESET);&lt;br /&gt;
    int j = nodes.getLength();&lt;br /&gt;
    for (int i = 0; i &amp;lt; j; i++) {&lt;br /&gt;
      System.out.println(nodes.item(i).getTextContent());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Return a NodeList ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.FileReader;&lt;br /&gt;
import javax.xml.xpath.XPath;&lt;br /&gt;
import javax.xml.xpath.XPathConstants;&lt;br /&gt;
import javax.xml.xpath.XPathFactory;&lt;br /&gt;
import org.w3c.dom.Element;&lt;br /&gt;
import org.w3c.dom.NodeList;&lt;br /&gt;
import org.xml.sax.InputSource;&lt;br /&gt;
public class GuestList {&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    XPathFactory factory = XPathFactory.newInstance();&lt;br /&gt;
    XPath xPath = factory.newXPath();&lt;br /&gt;
    NodeList shows = (NodeList) xPath.evaluate(&amp;quot;/schedule/show&amp;quot;, new InputSource(new FileReader(&lt;br /&gt;
        &amp;quot;tds.xml&amp;quot;)), XPathConstants.NODESET);&lt;br /&gt;
    for (int i = 0; i &amp;lt; shows.getLength(); i++) {&lt;br /&gt;
      Element show = (Element) shows.item(i);&lt;br /&gt;
      String guestName = xPath.evaluate(&amp;quot;guest/name&amp;quot;, show);&lt;br /&gt;
      String guestCredit = xPath.evaluate(&amp;quot;guest/credit&amp;quot;, show);&lt;br /&gt;
      System.out.println(show.getAttribute(&amp;quot;weekday&amp;quot;) + &amp;quot;, &amp;quot; + show.getAttribute(&amp;quot;date&amp;quot;) + &amp;quot; - &amp;quot;&lt;br /&gt;
          + guestName + &amp;quot; (&amp;quot; + guestCredit + &amp;quot;)&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Search an XPath ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.FileReader;&lt;br /&gt;
import javax.xml.xpath.XPath;&lt;br /&gt;
import javax.xml.xpath.XPathFactory;&lt;br /&gt;
import org.xml.sax.InputSource;&lt;br /&gt;
public class GetName {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        XPathFactory factory = XPathFactory.newInstance();&lt;br /&gt;
        XPath xPath = factory.newXPath();&lt;br /&gt;
        String result = xPath.evaluate(&amp;quot;/schedule/@name&amp;quot;, new InputSource(&lt;br /&gt;
                new FileReader(&amp;quot;tds.xml&amp;quot;)));&lt;br /&gt;
        System.out.println(result);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  XPath.evaluate(&amp;quot;/schedule/@seriesId&amp;quot;) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.FileReader;&lt;br /&gt;
import javax.xml.xpath.XPath;&lt;br /&gt;
import javax.xml.xpath.XPathConstants;&lt;br /&gt;
import javax.xml.xpath.XPathFactory;&lt;br /&gt;
import org.xml.sax.InputSource;&lt;br /&gt;
public class GetSeriesId {&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    XPathFactory factory = XPathFactory.newInstance();&lt;br /&gt;
    XPath xPath = factory.newXPath();&lt;br /&gt;
    Double result = (Double) xPath.evaluate(&amp;quot;/schedule/@seriesId&amp;quot;, new InputSource(new FileReader(&lt;br /&gt;
        &amp;quot;tds.xml&amp;quot;)), XPathConstants.NUMBER);&lt;br /&gt;
    System.out.println(result.intValue());&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>