导航:首页 > 编程语言 > java读取xml节点

java读取xml节点

发布时间:2022-07-27 18:20:18

1. java怎么取出xml中指定节点中的内容

可以通过元素中的getText方法获取到节点的内容。
举例:
SAXReader sax = new SAXReader();
Document document = sax.read(reader);//reader为定义的一个字符串,可以转换为xml
Element root = document.getRootElement();//获取到根节点元素String str = root .getText()//获取到节点的内容
用到的是dom4j-1.6.1.jar,需要引入的包是:
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
备注:如果是多个子节点可以通过”Element xx=root .element("code")“获取到子节点的元素,前提是需要知道子节点的名称。

2. java如何从一个xml文件读取根节点、子节点属性。

思路如下:
xml文件未知不明白什么意思?我索性就理解为一个目录下有很多xml文件,每个xml文件获取其中的bean节点属性。
1> 有xml文件路径,获取该路径下的所有文件,用后缀“.xml”或“.XML”过滤得到xml文件。
2> javax.xml.parsers.DocumentBuilder builder = factory.newDocumentBuilder();
org.w3c.dom.Document doc = builder.parse(is); 创建文档对象。
3>doc.getChildNodes()获取文档中所有的节点,循环遍历所得节点node,
通过node.getAttributes()获取节点所有属性,获取各个属性name和值即可,输出想要得到的数据。
或者通过doc.getElementsByTagName("bean");直接指定bean节点。然后用同样的方法获取属性名和值,输出。

以上是根据jdk的W3C库解析的。想方便可以通过dom4j、jdom进行文件操作。思路变化不大。

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

在我们的程序中,通常要有一些根据主机环境确定的变量.比如数据库访问用户名和密码,不同的主机可能设置不一样.只要更改XML配置文件,就可以正常运行.

localhost

sqlname

username

password

上面这个myenv.xml配置文件一般是放在tomcat的WEB-INF/classes目录下.

我们编制一个Java程序直接读取,将dbhost dbuser dbpassword提取出来供其他程序访问数据库用.

目前使用SAX比较的多,与DOM主要区别是 SAX是一行一行读取XML文件进行分析,适合比较大文件,DOM是一次性读入内存,显然不能对付大文件.这里我们使用SAX解析,由于SAX解析器不断在发展,网上有不少文章是针对老版本的.假如你使用JDK1.4 ,可以参考 使用SAX处理XML文档 一文.这里的程序是根据其改进并且经过实践调试得来的.

对上面myenv.xml读取的Java程序:

import org.xml.sax.Attributes;

import org.xml.sax.helpers.DefaultHandler;

import org.xml.sax.SAXException;

import java.util.Properties;

//使用DefaultHandler的好处 是 不必陈列出所有方法,

public class ConfigParser extends DefaultHandler {

////定义一个Properties 用来存放 dbhost dbuser dbpassword的值

private Properties props;

private String currentSet;

private String currentName;

private StringBuffer currentValue = new StringBuffer();

//构建器初始化props

public ConfigParser() {

this.props = new Properties();

}

public Properties getProps() {

return this.props;

}

//定义开始解析元素的方法. 这里是将中的名称xxx提取出来.

public void startElement(String uri, String localName, String qName, Attributes attributes)

throws SAXException {

currentValue.delete(0, currentValue.length());

this.currentName =qName;

}

//这里是将之间的值加入到currentValue

public void characters(char[] ch, int start, int length) throws SAXException {

currentValue.append(ch, start, length);

}

//在碰到结束后,将之前的名称和值一一对应保存在props中

public void endElement(String uri, String localName, String qName) throws SAXException {

props.put(qName.toLowerCase(), currentValue.toString().trim());

}

}

上面的这个解析程序比较简单吧? 其实解析XML就是这么简单.

现在我们已经将dbhost dbuser dbpassword的值localhost sqlname username password提取了出来.但是这只是在在解析器内部,我们的程序还不能访问.需要再编制一个程序.

import java.util.Properties;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import java.net.URL;

public class ParseXML{

//定义一个Properties 用来存放 dbhost dbuser dbpassword的值

private Properties props;

//这里的props

public Properties getProps() {

return this.props;

}

public void parse(String filename) throws Exception {

//将我们的解析器对象化

ConfigParser handler = new ConfigParser();

//获取SAX工厂对象

SAXParserFactory factory = SAXParserFactory.newInstance();

factory.setNamespaceAware(false);

factory.setValidating(false);

//获取SAX解析

SAXParser parser = factory.newSAXParser();

//得到配置文件myenv.xml所在目录. tomcat中是在WEB-INF/classes

//下例中BeansConstants是用来存放xml文件中配置信息的类,可以自己代替或定义

URL confURL = BeansConstants.class.getClassLoader().getResource(filename);

try

{

//将解析器和解析对象myenv.xml联系起来,开始解析

parser.parse(confURL.toString(), handler);

//获取解析成功后的属性 以后 我们其他应用程序只要调用本程序的props就可以提取出属性名称和值了

props = handler.getProps();

}finally{

factory=null;

parser=null;

handler=null;

}

}

}

由于我们的XML文件是使用最简单的形式 ,因此解析器相对简单,但是这已经足够对付我们的配置文件了.

4. java如何获取XML中子节点的内容

java中获取xml节点元素值 根据不同的处理xml方式不同而不同。
java中解析xml的方式:大体可以使用以下四种
------------------------------------------------------------
DOM(Document Object Model)
为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,
然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。
优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;
缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;
使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)

SAX(Simple API for XML)
为解决DOM的问题,出现了SAX。SAX ,事件驱动。
当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,
程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个文档,占用资源少;
SAX解析器代码比DOM解析器代码小,适于Applet,下载。
缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;
从事件中只能得到文本,但不知该文本属于哪个元素;
使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;

DOM4J
DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,
同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,
特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J

JDOM
为减少DOM、SAX的编码量,出现了JDOM;优点:20-80原则,极大减少了代码量。
使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。
------------------------------
参考代码
dom4j
------------------------------
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
---------------------------------------------
File f = new File("students.xml");
SAXReader reader = new SAXReader();
Document doc = reader.read(f);
Element root = doc.getRootElement();

for (Iterator iter = root.elementIterator(); iter.hasNext();) {
Element element = (Element) iter.next();
// System.out.println(element.attributeValue("email"));

String ids=element.elementText("stuId");
System.out.println(ids);
String names=element.elementText("stuName");
System.out.println(names);
String ages=element.elementText("age");
System.out.println(ages);
}
------------------------------------
dom 方式
---------------
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
------------------------

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 允许名字空间
// factory.setNamespaceAware(true);
// 允许验证
// factory.setValidating(true);
// 获得DocumentBuilder的一个实例

DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException pce) {
System.err.println(pce);
// 出异常时输出异常信息,然后退出,下同
System.exit(1);
}

Document doc = null;
// 解析文档,并获得一个Document实例。

try {
try {
// InputStream is=new FileInputStream("students.xml");
doc = builder.parse("students.xml");
// doc = builder.parse(is);

} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (DOMException dom) {
System.err.println(dom.getMessage());
System.exit(1);
} catch (IOException ioe) {
System.err.println(ioe);
// System.exit(1);
}
for (int i = 0; i < nlStudent.getLength(); i++) {

Element elmtStudent = (Element) nlStudent.item(i);
String email = elmtStudent.getAttribute("email");
System.out.println(email);

NodeList ids = elmtStudent.getElementsByTagName("stuId");
Element id = (Element)ids.item(0);
Node tId = id.getFirstChild();
System.out.println(tId.getNodeValue());

NodeList names = elmtStudent.getElementsByTagName("stuName");
Element e = (Element)names.item(0);
Node tName = e.getFirstChild();
System.out.println(tName.getNodeValue());
}

5. java中如何直接获得xml中的某个指定的节点

�0�2�0�2�0�2 最近遇到一个问题,用java解析xml时,需要获得一个xml文档中指定的某个节点,当然最简单的办法就是遍历所有的节点,如某个节点满足条件,则是我们要的结果,但我不想遍历所有的节点,因为这个问题只是一个复杂过程中的一小步,它会被反复调用,因此我需要最直接的方法获得某个已知属性值的确定节点。因此,这个问题也可以概括为:有没有根据节点(或name)属性名获得该节点的原api。
�0�2�0�2�0�2�0�2 具体一些,有如下xml文档:<sheet<field row="2" col="2" type="int"DEA_XZ</field2_2
<field row="2" col="3" type="string"RTP_ID</field2_3
<field row="2" col="4" type="string"DEA_YEAR</field2_4
<field row="2" col="7" type="int"DEA_RTP_TYPE</field2_7</sheet�0�2�0�2 我想获得row="2" col="3"的节点,据我所查,好像没有直接的方法。
�0�2�0�2 变通一下,xml修改如下:�0�2<sheet<field name="row2_col2" type="int"DEA_XZ</field2_2
<field name="row2_col3" type="string"RTP_ID</field2_3
<field name="row2_col4" type="string"DEA_YEAR</field2_4
<field name="row2_col7" type="int"DEA_RTP_TYPE</field2_7</sheet�0�2�0�2 这样呢?有没有直接的api,可以获得name为row2_col3的节点?同样,我也没有得到答案,大家有知道告诉小弟一下,不胜感激。
�0�2�0�2 实在没有办法,我就用了种“另类”的方式,xml如下:<sheet<field2_2 type="int"DEA_XZ</field2_2
<field2_3 type="string"RTP_ID</field2_3
<field2_4 type="string"DEA_YEAR</field2_4
<field2_7 type="int"DEA_RTP_TYPE</field2_7</sheet�0�2�0�2 这样看起来很不优雅,至少我是这么认为的。但这样却可以直接拿到你想要的节点:�0�2org.jdom.Element root = document.getRootElement();
�0�2�0�2 目前,我就是这样解决的,但我感觉很不优雅,我想我的xml文档(配置)文件应该保持第一种或第二种格式更好些。所以请大家帮忙,看看有没有直接的方法(api).

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

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

7. 在Java中如何读取XML字符串的元素值

java读取xml节点元素,主要使用java提供的解析xml的工具类SAXParserFactory,如下代码:

package xml.xmlreader;import java.io.File;import java.net.URL;import java.util.Properties;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;public class CFGParser {//解析xml文件的工具类 private Properties props; public Properties getProps() { return props; } public void setProps(Properties props) { this.props = props; } public void parse(String filename) throws Exception { CFGHandler handler = new CFGHandler(); SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setNamespaceAware(false); factory.setValidating(false); SAXParser parser = factory.newSAXParser(); URL confURL = super.getClass().getClassLoader().getResource(filename); if (confURL == null) { System.out.println("Can't find configration file."); return; } try { parser.parse(confURL.toString(), handler); this.props = handler.getProps(); } finally { factory = null; parser = null; handler = null; } } public void parseFile(String filename) throws Exception { CFGHandler handler = new CFGHandler(); SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setNamespaceAware(false); factory.setValidating(false); SAXParser parser = factory.newSAXParser(); File f = new File(filename); if ((f == null) || (!f.exists())) return; try { parser.parse(f, handler); this.props = handler.getProps(); } finally { factory = null; parser = null; handler = null; } }}package xml.xmlreader;import java.util.Properties;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler; public class CFGHandler extends DefaultHandler{ private Properties props; private String currentSet; private String currentName; private StringBuffer currentValue = new StringBuffer(); public CFGHandler() { this.props = new Properties(); } public Properties getProps() { return this.props; } public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { this.currentValue.delete(0, this.currentValue.length()); this.currentName = qName; } public void characters(char[] ch, int start, int length) throws SAXException { this.currentValue.append(ch, start, length); } public void endElement(String uri, String localName, String qName) throws SAXException { this.props.put(qName.toLowerCase(), this.currentValue.toString().trim()); }}xml文件 <?xml version="1.0" encoding="UTF-8"?><xml-body> <refresh_userlist desc="用户列表刷新间隔时间(秒)">6</refresh_userlist> <refresh_message desc="短消息刷新间隔时间(秒)">10</refresh_message> <morningbegin desc="上午上班时间">23:00</morningbegin> <morningend desc="上午下班时间">12:00</morningend> <afternoonbegin desc="下午上班时间">18:00</afternoonbegin></xml-body>jsp获取各个节点的值:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><html> <jsp:useBean id="cfgp" scope="page" class="xml.xmlreader.CFGParser"></jsp:useBean> <body> <% cfgp.parse("kaoqin.xml"); Properties pro = cfgp.getProps(); String stTime = pro.getProperty("morningbegin"); String edTime = pro.getProperty("morningend"); String afternoonbegin = pro.getProperty("afternoonbegin"); out.println(stTime+"\n"+edTime+"\n"+afternoonbegin); System.out.println(stTime+"\n"+edTime+"\n"+afternoonbegin); %> </body></html>

8. JAVA怎么从XML里取出节点的值

可以用dom4j. 参考如下代码(记得引入dom4j-1.6.1.jar和jaxen-1.1.4.jar):

<?xmlversion="1.0"encoding="ISO-8859-1"?>

<CATALOG>
<allSong>
<Name>girl</Name>
<Time>2012.12.21</Time>
</allSong>
<CD>
<TITLE>EmpireBurlesque</TITLE>
<ARTIST>BobadDylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Coludafadmbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>EmpireBurlesque</TITLE>
<ARTIST>BobDylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
</CATALOG>



importjava.io.File;
importjava.util.List;

importorg.dom4j.Document;
importorg.dom4j.Element;
importorg.dom4j.io.SAXReader;

publicclassTest{

/**
*@paramargs
*@throwsException
*/
@SuppressWarnings({"rawtypes","unchecked"})
publicstaticvoidmain(String[]args)throwsException{
SAXReadersaxReader=newSAXReader();
FileinputFile=newFile("src/this.xml");
Documentdocument=saxReader.read(inputFile);
Elementroot=document.getRootElement();

Elemente=(Element)root.selectSingleNode("/CATALOG/allSong/Name");

//allSong节点下的Name节点的value
Stringname=e.getText();
System.out.println(name);

ListcdList=root.selectNodes("/CATALOG/CD/ARTIST");
Element[]cdArray=newElement[cdList.size()];
cdList.toArray(cdArray);

//第二个CD节点下的ARTIST节点的value
StringARTIST2=cdArray[1].getText();
System.out.println(ARTIST2);
}

}

9. java读取带节点的xml数据

SAXBuilder b = new SAXBuilder();
Document read_doc = b.build(new File("datafiles/address.xml"));//换成你自己的文件路径
Element root = read_doc.getRootElement();
List status = root.getChildren("status");
for( int i = 0;i<ls.size();i++){
Element e = (Element)status.get(i);
String id= e.getChildText("id");
String created_at = e.getChildText("create_at");
String text = e.getChildText("text");
String user_name=e.getChild("user").getChildText("name");
String user_location=e.getChild("user").getChildText("location");
}
需要jdom包

10. java读取xml文件内容

						XMLStreamReaderreader=inputFactory.createXMLStreamReader(newFileInputStream(newFile("xmlPath")));//这里可以替换成一个流
List<Map<String,String>>dataList=newArrayList<Map<String,String>>();
while(reader.hasNext()){
intevent=reader.next();
if(event==XMLStreamConstants.START_ELEMENT){
//这里获取你的节点名称
if(reader.getName().equals("Hardware")){
intattrCount=reader.getAttributeCount();
Map<String,String>dataMap=newHashMap<String,String>();

for(inti=0;i<attrCount;i++){
StringattrName=reader.getAttributeLocalName(i);
StringattrValue=reader.getAttributeValue(i);
// System.out.println("----attrname:"+attrName);
// System.out.println("----attrvalue:"+attrValue);
dataMap.put(attrName,attrValue);
}
dataList.add(dataMap);
}
}
}

阅读全文

与java读取xml节点相关的资料

热点内容
正宗溯源码大燕条一克一般多少钱 浏览:917
电脑感染exe文件夹 浏览:916
wpsppt怎么转pdf格式 浏览:88
腾讯文档在线编辑怎么添加密码 浏览:880
本地不能访问服务器地址 浏览:865
访问服务器命令 浏览:835
华为云服务器分销商 浏览:954
Linux定位内存泄露 浏览:198
工程加密狗视频 浏览:720
不在内网怎么连接服务器 浏览:664
云服务器app安卓下载 浏览:966
如何查看linux服务器的核心数 浏览:137
交易平台小程序源码下载 浏览:148
程序员记笔记用什么app免费的 浏览:646
java与单片机 浏览:897
服务器内网如何通过公网映射 浏览:478
程序员穿越到宋代 浏览:624
怎么使用云服务器挂游戏 浏览:620
真实的幸福pdf 浏览:345
d盘php调用c盘的mysql 浏览:267