程序如下,其中equal(“”)双引号中的值为节点的属性值
属性值获取如下:
package saxbuilderibmxmlproperty;
import javaioFile;
import javaioIOException;
import javautilIterator;
import orgdom4jAttribute;
import orgdom4jDocument;
import orgdom4jDocumentException;
import orgdom4jElement;
import orgdom4jioSAXReader;
import orgjdomJDOMException;
import orgjdominputSAXBuilder;
public class XmlProperty {
public Element element;
String path = "D:\\xml\\axml";
public void getElementProperty() {
File file = new File(path);
try {
SAXReader reader = new SAXReader();
Document dc = readerread(file);
Element e = dcgetRootElement();
// 节点值
Element child = (Element) egetQName("COMMAND");
Systemoutprintln(childtoString());
// 一级节点
for (Iterator iterator = eelementIterator(); iteratorhasNext();) {
Element el = (Element) iteratornext();
// 一级节点的属性信息
for (Iterator iterator2 = elattributeIterator(); iterator2
hasNext();) {
Attribute attribute = (Attribute) iterator2next();
if(attributegetName()equals("bodyCategory")){
Systemoutprintln("attributegetName()一级节点的属性信息+"+attributegetName()+attributegetValue());
}else{
Systemoutprintln("attributegetName()一级节点的属性信息+"+attributegetName()+attributegetValue());
}
// 二级节点
for (Iterator iterator3 = elelementIterator(); iterator3
hasNext();) {
Element ele = (Element) iterator3next();
// 二级节点的属性信息
for (Iterator iterator4 = eleattributeIterator(); iterator4
hasNext();) {
Attribute attribute1 = (Attribute) iterator4next();
if(attribute1getName()equals("cmdType")){
Systemoutprintln("attribute1getName()二级节点的属性信息+"+attribute1getName()+"+"+attribute1getValue());
}else{
Systemoutprintln("attribute1getName()二级节点的属性信息+"+attribute1getName()+"+"+attribute1getValue());
}
}
}
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
}
�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�2orgjdomElement root = documentgetRootElement();
�0�2�0�2 目前,我就是这样解决的,但我感觉很不优雅,我想我的xml文档(配置)文件应该保持第一种或第二种格式更好些。所以请大家帮忙,看看有没有直接的方法(api)
创建解析器
SAXReader saxreader = new SAXReader();
读取文档
Document doc = saxreaderread(new File("url"));
获取根
Element root = docgetRootElement();
获取子节点
List<Element> list = rootelements();
Systemoutprintln(eelementText("name"));
Systemoutprintln(eelement("score")attributeValue("java"));
Reader reader = new InputStreamReader(con
getInputStream());
SAXReader sax = new SAXReader();
// saxsetEncoding("GBK");
Document document = saxread(reader);
documentsetXMLEncoding("GBK");
Element root = documentgetRootElement();
// Document doc = readerread(read);
// Element root = docgetRootElement();
readNode(root, "");
public static void readNode(Element root, String prefix) {
if (root == null) return;
// 获取属性
List<Attribute> attrs = rootattributes();
if (attrs != null && attrssize() > 0) {
Systemerrprint(prefix);
for (Attribute attr : attrs) {
Systemerrprint(attrgetValue() + " ");
}
Systemerrprintln();
}
// 获取他的子节点
List<Element> childNodes = rootelements();
prefix += "\t";
for (Element e : childNodes) {
//输出内容
Systemerrprintln(egetName()+":"+egetData());
readNode(e, prefix);
}
}
package comapplet;
import javaioByteArrayInputStream;
import javaioFile;
import javaioStringReader;
import javautilIterator;
import javautilList;
import orgapachecommonslangStringUtils;
import orgdom4jDocument;
import orgdom4jDocumentHelper;
import orgdom4jElement;
import orgdom4jioSAXReader;
public class B {
public static void main(String[] args) {
String inputBizInfo = "<xml version=\"10\" encoding=\"utf-8\">\n"
+ "<EAS>\n"
+ " <Header>\n"
+ " <TransID>e688030e-f86f-455b-b143-58871084670b</TransID>\n"
+ " <TransTime>2015-05-29 02:12:15</TransTime>\n"
+ " <DataType>Vendor/Customer</DataType>\n"
+ " <OptCatalog>Single</OptCatalog>\n"
+ " <OptType>Update/Create</OptType>\n"
+ " <RowCount>1</RowCount>\n" + " </Header>\n"
+ " <MasterData>\n" + " <Field name=\"UnitClass\">\n"
+ " <!--单位分类-->2000 单位分类 测试一下\n" + " </Field>\n"
+ " <Field name=\"AccountGroup\">\n" + " <!--账户组-->\n"
+ " </Field>\n" + " <Field name=\"Name1 \">\n"
+ " <!--单位全称-->1111 文具公司\n" + " </Field>\n"
+ " </MasterData>\n" + " <ChangeDetail>\n"
+ " <ChangeFields name=\"Name1\">\n"
+ " <OldValue>文具</OldValue>\n"
+ " <NewValue>皮包</NewValue>\n"
+ " <OperationType>修改</OperationType>\n"
+ " </ChangeFields>\n" + " </ChangeDetail>\n" + "</EAS>";
// 我想获得这个xml中遍历分别获得
// 2000 单位分类 测试一下 ,空, 1111 文具公司 这样的3组值,每组值中的数据 用空格隔开放到数组中去,应该怎么办呢
try {
SAXReader reader = new SAXReader();
String txt = inputBizInforeplaceAll("\n", "");
// Document doc = readerread(new StringReader(txt));
// Document doc = readerread(new
// File("F:\\zz\\FileRecv\\MyWebSocket\\src\\com\\applet\\NewFilexml"));
// Document doc = readerread(new ByteArrayInputStream(txt
// getBytes("UTF-8")));
// Systemerrprintln(txt);
// Systemerrprintln(rootattribute(0)getName());
Document doc = DocumentHelperparseText(txt);
Element root = docgetRootElement();
// Systemoutprintln("Root: " + rootgetName());
List projects = rootselectNodes("MasterData/Field");
// Systemerrprintln(projectssize());
Iterator it = projectsiterator();
while (ithasNext()) {
Element elm = (Element) itnext();
// Systemoutprintln("index:"+elmattributeValue("index")+" level:"+elmattributeValue("level")+" nickname:"+elmattributeValue("nickname")+" country:"+elmattributeValue("country")+" weiwang:"+elmattributeValue("weiwang"));
// Systemerrprintln(elmattributeValue(elmattribute(0)getName()));
// Systemerrprintln(elmgetTextTrim());
String text = elmgetTextTrim();
if (StringUtilsisNotBlank(text)) {
String[] split = textsplit(" ");
for (String string : split) {
//放入数组省略
Systemerrprintln(string);
}
}
}
} catch (Exception ex) {
exprintStackTrace();
}
}
}
以上就是关于java语句如何获取XML文件的节点值全部的内容,包括:java语句如何获取XML文件的节点值、java中如何直接获得xml中的某个指定的节点、java怎么通过xml节点的属性获取这个节点的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)