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

java语句如何获取XML文件的节点值,第1张

你说的是获取指定id下面的节点属性值吧!

程序如下,其中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节点的属性获取这个节点的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9528384.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存