我用java dom4j解析xml,并修改xml需要把某几个Node下的所有分支都读出,然后再写到另一个xml文件中。我不关心这个Node下的具体内容,不想一个一个分支去读,想把整个Node下的内容整体复制过去。
怎么办?
怎么办?
解决方案 »
- 在jsp里面 当某个元素触发onmouseover时,想要出旁边出现一个浮动div
- osgi整合Struts 我请求路径访问不到
- 关于WebService服务地址(IP可以访问,localhost不能访问)
- jsp和servlet的问题
- 这样能防止垃圾邮件?
- 如何用jsp获取远程的页面保存到本地并且能读取
- 给我讲讲吧
- Struts2 对表单如何验证
- 急!急!急!在线等待!tomcat和jdk如何安装使用?偶搞不好啊
- ■■j2se是j2ee的子集吗?如果java开发环境完全采用j2ee的jar,不采用j2se的jar开发可以吗?■■
- C#搭配Windows+IIS+VS+SQLServer,JAVA应搭配啥?
- 高分求javaWeb实现点对点视频聊天
vector = new Vector<DataInfo>();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
org.w3c.dom.Document document = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException ex) {
ex.printStackTrace();
}
try {
document = builder.parse(new File("config/dbconfig.xml"));
} catch (SAXException ex) {
ex.printStackTrace();
} NodeList nodeList = document.getElementsByTagName("data");
for (int i = 0; i < nodeList.getLength(); i++) {
DataInfo info = new DataInfo();
org.w3c.dom.Node fatherNode = nodeList.item(i);
info.setNumber(i+1);
info.setIsSelect(Boolean.valueOf(fatherNode.getAttributes().item(0).getNodeValue()));
info.setIp(fatherNode.getAttributes().item(1).getNodeValue());
info.setDatabase(fatherNode.getAttributes().item(2).getNodeValue());
info.setArea(fatherNode.getAttributes().item(3).getNodeValue());
info.setUsername(fatherNode.getAttributes().item(4).getNodeValue());
info.setPassword(fatherNode.getAttributes().item(5).getNodeValue());
vector.add(info);
}
return vector;
}
if(!file.exists()||!(file.getName().endsWith(".xml")||file.getName().endsWith(".XML"))) return null;
StringBuffer content=new StringBuffer("代码 中文 序号--");
SAXBuilder sb = new SAXBuilder();
Document doc=null;
try {
doc = sb.build(file);
Element root = doc.getRootElement();
Element sourceEle = (Element)XPath.selectSingleNode(root, "/"+root.getName()+"/DataSources/DataSource/Data/Source");
if (sourceEle==null) return null;
String str=sourceEle.getText();
//System.out.println(str);
setProperty(str); //分别给sheetName、fileName赋值
//拿到/Data/Columns所用Column节点
List<Element> elementList=XPath.selectNodes(root, "/"+root.getName()+"/DataSources/DataSource/Data/Columns/Column");
for (int i = 0; i < elementList.size(); i++) {
// System.out.println(elementList.get(i).getName());
// List<Element> childrenList=elementList.get(i).getChildren();
if(elementList.get(i).getChildText("name").length()>4)
content.append(elementList.get(i).getChildText("name").substring(4)).append(" ");
content.append(elementList.get(i).getChildText("text")).append(" ");
content.append(elementList.get(i).getChildText("sequence")).append("--");
}
} catch (JDOMException e) {
System.out.println("读取XML文件出现JDOMException异常...........");
e.printStackTrace();
} catch (IOException e) {
System.out.println("读取XML文件出现IOException异常.............");
e.printStackTrace();
}
return String.valueOf(content);
}
另外,我用的是dom4j我觉得我提出的是一个很普遍的需求吧,难道没有一个函数直接调用就行的?
<?xml version="1.0" encoding="GB2312"?>
<root>
<a>sdfs</a>
<b><c>fsf</c></b>
</root> SAXReader reader = new SAXReader();
Document document = reader.read(new File("c:/xml/Dom4jSample2.xml"));
Element root = document.getRootElement();
QName qname = new QName("b");
Element e =root.element(qname);
List<Element> list = root.elements(qname);
System.out.println(e.asXML());这样行吗?
<root>
<a>sdfs</a>
<b>
<c>fsf</c>
<d>aab<d>
</b>
</root>
java程序只知道Node <b>的名字,不知道<b>以下的内容。要复制出新.xml
<root>
<b>
<c>fsf</c>
<d>aab<d>
</b>
</root>要能够无视<b>...</b>中的内容
我要写java程序,和别人的包合作处理数据。
数据是以xml相互传递的。
我要读入一个节点下的所有内容,
处理这个节点的某些内容,忽视其它的数据结构,(这样接口才通用)但不能丢掉这些有用数据。
最后把我处理的结果和源数据的有用部分写成xml
传给下一个包。所以要有一个办法做到复制节点。
就像用javascript中用函数newNode = Node.cloneNode(node,true)一样
我再看看怎么写
<?xml version="1.0" encoding="UTF-8"?>
<root>
<a>A</a>
<b>
<c>C</c>
<d>D</d>
</b>
</root>import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class dom4jPractice1 {
public static void main(String args[]){
SAXReader sax=new SAXReader();
try {
Document doc=sax.read(new File("src/a.xml"));
//取得b节点的元素
Element b=doc.getRootElement().element("b");
//获得b节点下的内容
String str=b.asXML();
//创建新的document对象
Document newdoc=DocumentHelper.createDocument();
Element root=newdoc.addElement("root");
//将b节点下的内容写入root节点下
root.addText(str);
//用输出流输出所创建的新的xml文件
BufferedWriter bw=new BufferedWriter(new FileWriter(new File("src/a_new.xml")));
bw.write(newdoc.asXML());
bw.flush();
bw.close();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}}
获取Node,再:public static String outputString(Node node) {
TransformerFactory transFactory=TransformerFactory.newInstance();
try {
Transformer transformer = transFactory.newTransformer();
StringWriter sw = new StringWriter();
transformer.transform( new DOMSource(node), new StreamResult(sw));
return sw.toString();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} return "";俺的难处在于,我只要内容,不要<?xml version="1.0" encoding="UTF-8"?><b> ...头。。只把内容放入另外一个xml中,难,太难,只取内容。现在还没找到办法,不想递归