微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Webservice_10_Stax的基本操作(XPath方式读取xml,用XMLStreamReader创建Xml,用Transformer更新节点信息)

非常感谢孙浩老师。

XPath方式读取xml

/** 
	* @Title: test06 
	* @Description: 用XPath方式读取xml。得到foodId='food_002'的name元素的值。
	* @param      
	* @return void     
	* @throws 
	*/
	@Test
	public void test06() {
		InputStream is = null;
		try {
			is = TestStax.class.getClassLoader().getResourceAsstream(
					"menus.xml");
			// 创建文档处理对象
			DocumentBuilder db = DocumentBuilderFactory.newInstance()
					.newDocumentBuilder();
			// 通过DocumentBuilder创建doc的文档对象
			Document doc = db.parse(is);
			// 创建XPath
			XPath xpath = XPathFactory.newInstance().newXPath();
			// 第一个参数就是xpath,第二参数就是文档
			NodeList list = (NodeList) xpath.evaluate(
					"//food[@foodId='food_002']",doc,XPathConstants.NODESET);
			for (int i = 0; i < list.getLength(); i++) {
				// 遍历输出相应的结果
				Element e = (Element) list.item(i);
				System.out.println(e.getElementsByTagName("name").item(0)
						.getTextContent());
			}
		} catch (ParserConfigurationException e) {
			e.printstacktrace();
		} catch (SAXException e) {
			e.printstacktrace();
		} catch (IOException e) {
			e.printstacktrace();
		} catch (XPathExpressionException e) {
			e.printstacktrace();
		} finally {
			try {
				if (is != null)
					is.close();
			} catch (IOException e) {
				e.printstacktrace();
			}
		}
	}


用XMLStreamReader创建XML

/** 
	* @Title: test07 
	* @Description: 使用XMLStreamReader创建XML
	* @param      
	* @return void     
	* @throws 
	*/
	@Test
	public void test07() {
		try {
			XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(System.out);
			writer.writeStartDocument("UTF-8","1.0");
			writer.writeEndDocument();
			String namespace = "http://1342334";
			writer.writeStartElement("xsd","coder",namespace);
			writer.writeStartElement(namespace,"name");
			writer.writeCharacters("lichen");
			writer.writeEndElement();
			writer.writeEndElement();
			writer.flush();
			writer.close();
		} catch (XMLStreamException e) {
			e.printstacktrace();
		} catch (FactoryConfigurationError e) {
			e.printstacktrace();
		}
	}

 

用Transformer更新节点信息

/** 
	* @Title: test08 
	* @Description: 使用Transformer更新节点信息
	* @param      
	* @return void     
	* @throws 
	*/
	@Test
	public void test08() {
		InputStream stream = TestStax.class.getClassLoader().getResourceAsstream("menus.xml");
		try {
			//创建文档对象
			DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
			Document document = builder.parse(stream);
			//创建XPath
			XPath xpath = XPathFactory.newInstance().newXPath();
			Transformer tran = TransformerFactory.newInstance().newTransformer();
			tran.setoutputProperty(OutputKeys.ENCODING,"UTF-8");
			tran.setoutputProperty(OutputKeys.INDENT,"yes");
			//第一个参数就是xpath,第二参数就是文档
			NodeList list = (NodeList)xpath.evaluate("//food[name='StrawBerry Belgian Waffles']",document,XPathConstants.NODESET);
			//获取price节点
			Element be = (Element)list.item(0);
			Element e = (Element)(be.getElementsByTagName("price").item(0));
			e.setTextContent("$1234");
			Result result = new StreamResult(System.out);
			//通过tranformer修改节点
			tran.transform(new DOMSource(document),result);
		} catch (ParserConfigurationException e) {
			e.printstacktrace();
		} catch (SAXException e) {
			e.printstacktrace();
		} catch (IOException e) {
			e.printstacktrace();
		} catch (TransformerConfigurationException e) {
			e.printstacktrace();
		} catch (TransformerFactoryConfigurationError e) {
			e.printstacktrace();
		} catch (TransformerException e) {
			e.printstacktrace();
		} catch (XPathExpressionException e) {
			e.printstacktrace();
		}
	}

-----------------------------------------------修改过----------------------------------------------

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐