java语句如何获取XML文件的节点值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java语句如何获取XML文件的节点值相关的知识,希望对你有一定的参考价值。

如题 我想通过先获取id再获取value的方法得到XML文件的节点值 请问下Java语句该如何编写呢

你说的是获取指定id下面的节点的属性值吧!
程序如下,其中equal(“”)双引号中的值为节点的属性值
属性值获取如下:
package saxbuilder.ibm.xmlproperty;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
public class XmlProperty
public Element element;
String path = "D:\\xml\\a.xml";
public void getElementProperty()
File file = new File(path);
try
SAXReader reader = new SAXReader();
Document dc = reader.read(file);
Element e = dc.getRootElement();
// 节点值
Element child = (Element) e.getQName("COMMAND");
System.out.println(child.toString());
// 一级节点
for (Iterator iterator = e.elementIterator(); iterator.hasNext();)
Element el = (Element) iterator.next();
// 一级节点的属性信息
for (Iterator iterator2 = el.attributeIterator(); iterator2
.hasNext();)
Attribute attribute = (Attribute) iterator2.next();
if(attribute.getName().equals("bodyCategory"))
System.out.println("attribute.getName()一级节点的属性信息+"+attribute.getName()+attribute.getValue());
else
System.out.println("attribute.getName()一级节点的属性信息+"+attribute.getName()+attribute.getValue());


// 二级节点
for (Iterator iterator3 = el.elementIterator(); iterator3
.hasNext();)
Element ele = (Element) iterator3.next();
// 二级节点的属性信息
for (Iterator iterator4 = ele.attributeIterator(); iterator4
.hasNext();)
Attribute attribute1 = (Attribute) iterator4.next();
if(attribute1.getName().equals("cmdType"))
System.out.println("attribute1.getName()二级节点的属性信息+"+attribute1.getName()+"+"+attribute1.getValue());

else
System.out.println("attribute1.getName()二级节点的属性信息+"+attribute1.getName()+"+"+attribute1.getValue());





catch (DocumentException e)
// TODO Auto-generated catch block
e.printStackTrace();


参考技术A package org.lxh.xml.dom ;
import java.io.* ;
import org.w3c.dom.* ;
import javax.xml.parsers.* ;
public class DOMDemo
public static void main(String args[]) throws Exception
// 取得DocumentBuilderFactory类的对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance() ;
// 取得DocumentBuilder类的对象
DocumentBuilder build = factory.newDocumentBuilder() ;
Document doc = build.parse(new File("D:" + File.separator + "dom_demo_02.xml")) ;
NodeList nl = doc.getElementsByTagName("name") ;
// 输出节点
System.out.println("姓名:" + nl.item(0).getFirstChild().getNodeValue()) ;

参考技术B DOM4j

public static Map<String, String[]> getKeyValueFromXml(String xmlContent, String listPath, String keyName,
String... valName)
Map<String, String[]> ret = new HashMap<String, String[]>();
org.dom4j.Document document = null;
try
document = DocumentHelper.parseText(xmlContent);
catch (DocumentException documentException)
documentException.printStackTrace();

if (document != null)
List<org.dom4j.Node> keyNodes = document.selectNodes(listPath);
for (org.dom4j.Node keyNode : keyNodes)
if (keyNode instanceof Element)
Element ele = (Element) keyNode;
String key = ele.elementText(keyName);
String[] val = new String[valName.length];
for (int i = 0; i < valName.length; i++)
String val1 = ele.elementText(valName[i]);
val[i] = val1;


ret.put(key, val);




return ret;
追问

用dom4j解析XML我知道 我是想问如何获取获取指定id下某一项的参数值 java语句该如何写

本回答被提问者采纳

【求助】Dom4j 生成xml,节点增加属性时,属性值中有特殊字符,如何做到不转义

如下代码,生成的xml中,“leaf”节点有个key属性,其属性值为“a>b”,但是生成的xml将“>”转义成“>”了,求问如果做到不转义。

```
public static void main(String[] args)
Document document = DocumentHelper.createDocument();
Element root= document.addElement("root");
Element element = root.addElement("leaf");
String str = "a>b";
element.addAttribute("key", str);
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("utf-8");
Writer writer;
try
writer = new FileWriter("a.xml");
XMLWriter xmlWriter = new XMLWriter(writer, outputFormat);
xmlWriter.setEscapeText(false);// 并不能解决问题!!!
xmlWriter.write(document);
xmlWriter.close();
catch (IOException e)
e.printStackTrace();


```
实际生成的xml:
<?xml version="1.0" encoding="utf-8"?>
<root>
<leaf key="a>b"/>
</root>
期望生成的xml:
<?xml version="1.0" encoding="utf-8"?>
<root>
<leaf key="a>b"/>
</root>

setEscapeText(false) 只是能改变 escapeElementEntities(String st) 中的参数,主要能改变文本里面如:
<root> aaaa>bbbb <root/> 中aaaa>bbbb的中的>不转变
对于Attribute 里面的特殊字符,我查了好久的原码发现人家里面是从
protected void writeEscapeAttributeEntities(String txt) throws IOException
if (txt != null)
String escapedText = escapeAttributeEntities(txt);
writer.write(escapedText);

//(在XMLWriter类中第1174行)
里面有个 escapeAttributeEntities(txt); 这个是专门用来转变Attribute 里面的特殊字符的,
所以要想解决这个问题,我是用了继承,写了一个
public class MyXMLWriter extends XMLWriter
......
protected void writeEscapeAttributeEntities(String txt) throws IOException
if (txt != null)
//String escapedText = escapeAttributeEntities(txt);
writer.write(txt);


.......

直接注释了原码中的//StringescapedText=escapeAttributeEntities(txt);
就完美解决了。
参考技术A 我通过Dom4j读取file节点的append属性值的时候,当该节点没有设置append的值,读取的数据为空,但我想当没有显示声明值的时候,读取到的是xsd文件中设置的默认值,有人做过类

以上是关于java语句如何获取XML文件的节点值的主要内容,如果未能解决你的问题,请参考以下文章

java 如何读取xml文件中的一个节点下的多个相同子节点

java中如何读取xml中数据。多节点的。给我一个例子,谢谢。

asp.net如何获取到xml文件的节点值

java中jtree双击叶节点如何获取该文件所在的路径

02-Java是如何解析xml文件的(DOM)

【求助】Dom4j 生成xml,节点增加属性时,属性值中有特殊字符,如何做到不转义