加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Webservice_10_Stax的基本操作(XPath方式读取xml,用XMLStreamRe

发布时间:2020-12-17 00:12:09 所属栏目:安全 来源:网络整理
导读:非常感谢 孙浩 老师。 XPath方式读取xml /** * @Title: test06 * @Description: 用XPath方式读取xml。得到foodId='food_002'的name元素的值。* @param * @return void * @throws */@Testpublic void test06() {InputStream is = null;try {is = TestStax.cla

非常感谢孙浩老师。

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();
		}
	}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读