获取XML下的所有节点(父节点及子节点)

<Structure><docctrltype="C001"typetext=""><docctrltype="C002"types=""typetext=""></do... <Structure>
<docctrl type="C001" typetext="">
<docctrl type="C002" types="" typetext=""></docctrl>
<docctrl type="C003" types="" typetext="">
<doc type="C004" types="" typetext=""></docctrl>
<docl type="C005" types="" typetext="">
<ctrl type="C006" types="" typetext=""></ctrl>
<ctrl type="" types="" typetext=""></ctrl>
</doc>
</docctrl>
</docctrl>
</Structure>
要获取<Structure></Structure>节点下得所有节点,不只是子节点,还有子节点下的节点<docctrl></docctrl>、<doc></doc>、<ctrl><ctrl> 中的“type”属性值;
此种要求如何才能得到;

或者就是通过传递一个“type”值,如C004,怎样匹配到XML下的对应节点,并找到它的父节点
展开
 我来答
阿幽魂
2019-09-20
知道答主
回答量:8
采纳率:0%
帮助的人:3943
展开全部



xml结构

本方案用来解决XML根据父节点的属性得到指定子节点的属性的值

需要的jar包:

jar包

本方案的xml结构为以下格式:看图



package com.itqingyou.xml;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class CityXMLServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@SuppressWarnings("unchecked")
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/xml;charset=utf-8");// 发送xml这里要修改

/*
* 获取省份名称,加载该省对应的<province>元素 把元素转换成字符串发送非客户端

* 1.获取省份名称 2.使用省份名称查找对应的<prouince>元素 3.再把<province>元素转换成字符串发送!

*/

try {
/*
* 得到Document
*/
SAXReader reader = new SAXReader();
InputStream input = this.getClass().getResourceAsStream("/China.xml");
Document doc = reader.read(input);
/*
* 获取参数
*/
String pname = request.getParameter("pname");// 获取省份名称

System.out.println(pname);
// Element proEle =
// (Element)doc.selectSingleNode("//province[@name='"+pname+"']"+"//city[]");
Element proEle = (Element) doc.selectSingleNode("//province[@name='" + pname + "']");
// List<Attribute> arrList =
// doc.selectNodes("//province[@name="+pname+"']/city/@name");
////这里是重点指定父节点后,再得到字节点的指定属性
List<Attribute> arrList = doc.selectNodes("//province[@name='" + pname + "']/" + "city/@name");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < arrList.size(); i++) {
sb.append(arrList.get(i).getValue());// 把每个属性的值存放到sb中
if (i < arrList.size() - 1) {
sb.append(",");
}
}
response.getWriter().print(sb);
System.out.println(sb);
// String value = arrList.get(1).getValue();
// System.out.println(value);
String asXML = proEle.asXML();// 把元素转换成字符串
// System.out.println(asXML);
// response.getWriter().print(asXML);

} catch (DocumentException e) {
e.printStackTrace();
}
}

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

id:清幽

需要jar包可以回复我

actonst
推荐于2017-10-12 · TA获得超过1.8万个赞
知道大有可为答主
回答量:8184
采纳率:80%
帮助的人:5216万
展开全部
XmlDocument xmlDoc = new XmlDocument();
// 载入xml文件
xmlDoc.Load("1.xml");
// 找到type='C004'的doc节点
XmlNode node = xmlDoc.SelectSingleNode("//doc[@type='C004']");
// 找到doc的父节点
XmlNode pnode = node.ParentNode;

遍历节点:
foreach (XmlNode nd in xmlDoc.DocumentElement.ChildNodes)
{ // nd 遍历所有docctrl节点
if (nd.hasChildNodes)
{
foreach (XmlNode n in nd.ChildNodes)
{ // n 遍历所有doc和ctrl节点
string stype = n.Attributes["type"].Value;
string s = n.InnerText; // 节点的值
}
}
}
更多追问追答
追问
我是只要C004的父节点C003 ,其它不要,有办法么
追答
上面给出来了:
XmlDocument xmlDoc = new XmlDocument();
// 载入xml文件
xmlDoc.Load("1.xml");
// 找到type='C004'的doc节点
XmlNode node = xmlDoc.SelectSingleNode("//doc[@type='C004']");
// 找到doc的父节点 <---- 这个就是C003节点
XmlNode pnode = node.ParentNode;

pnode就是你要找的。你可以就选上面的代码,遍历那一段都不要了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式