JDOM读取XML文件问题

2019-03-25 13:49|来源: 网路

1.XML文件
<?xml version="1.0" encoding="UTF-8"?>
<root target="sysmain"  desc="非现场监管报送"  id="Y000">
<DataItem text="数据处理">
<Item text="数据填报"></Item>
<Item text="文件提交"></Item>
<Item text="数据校验"></Item>
<Item text="数据汇总"></Item>
<Item text="Top(N)汇总"></Item>
</DataItem>
<DataItem text="报送管理" id="Y200">
<Item text="报送项目管理"></Item>
<Item text="报送文件生成"></Item>
</DataItem>
<DataItem text="数据查询" id="Y300">
</DataItem>
<DataItem text="制度查询" id="Y400">
</DataItem>
<DataItem text="规则定制" id="Y500">
</DataItem>
</root>

2.JAVA类
package com.pj.manager.action;

import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

public class MenuTreeAction {

  public static void main(String[] args) throws Exception{ 
    SAXBuilder sb=new SAXBuilder();
    Document doc=sb.build("MenuXML/1104SiteMap.xml"); //构造文档对象
    Element root=doc.getRootElement(); //获取根元素
    List list=root.getChildren("DataItem");//取名字为DataItem的所有元素
    for(int i=0;i<list.size();i++){
       Element element = (Element)list.get(i);
       String DataItem = element.getAttributeValue("text");
       System.out.println("父结点:"+DataItem); 
       Element root2 = doc.getRootElement().getChild("DataItem");
       List itemlist = root2.getChildren("Item");
       String[] Item = new String[itemlist.size()];
       for(int j=0; j<itemlist.size(); j++) {
       Element itemelement = (Element)itemlist.get(j);       
       Item[j] = itemelement.getAttributeValue("text");
       System.out.println("--子结点:"+Item[j]);
       } 
       System.out.println("-----------------------------------");
    }  
  }

}

3.输出结果
父结点:数据处理
--子结点:数据填报
--子结点:文件提交
--子结点:数据校验
--子结点:数据汇总
--子结点:Top(N)汇总
-----------------------------------
父结点:报送管理
--子结点:数据填报
--子结点:文件提交
--子结点:数据校验
--子结点:数据汇总
--子结点:Top(N)汇总
-----------------------------------
父结点:数据查询
--子结点:数据填报
--子结点:文件提交
--子结点:数据校验
--子结点:数据汇总
--子结点:Top(N)汇总
-----------------------------------
父结点:制度查询
--子结点:数据填报
--子结点:文件提交
--子结点:数据校验
--子结点:数据汇总
--子结点:Top(N)汇总
-----------------------------------
父结点:规则定制
--子结点:数据填报
--子结点:文件提交
--子结点:数据校验
--子结点:数据汇总
--子结点:Top(N)汇总
-----------------------------------

4.**********疑问所在***********
因为我在根结点root下面有多个相同的DataItem节点,我要取第二个DataItem下的所有Item节点应该如何去取???
上面程序所有DataItem节点下的子结点都为第一个DataItem下的子节点。

相关问答

更多
  • java中如何使用JDOM解析xml文件呢?以下小编就用实例为大家详细的介绍一下。需要的朋友可以参考下 JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。JDOM直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合概念以及映射),把SAX和DOM的功能有效地结合起来。 JDOM的官方地址:http://www.jdom.org/ 1.首先新建一个接口和2个类,为后续做准备 [Moveable.java] 复制代码 代码如下 ...
  • java.lang.Class InputStream getResourceAsStream(String name) ----- name可以写成 /xxxx.xml
  • 将目录参数传递给您的程序,而不是文件参数。 然后验证传入的参数实际上是一个目录,列出所有文件并处理每个文件。 例如: import java.io.File; import java.io.FilenameFilter; public class FileDemo { public static void main(String[] args) throws Exception { if (args.length != 1) { // print usage ...
  • 这是许多应用程序的一个相对常见的问题,而不仅仅是JDOM。 当您创建FileOutputStream并向其写入时,您必须在退出程序之前冲洗它并关闭它 。 更改: xmlOutput.output(doc, new FileOutputStream(new File("./src/Lexicon.xml"))); (使用try-with-resources): try (OutputStream fileout = new FileOutputStream(new File("./src/Lexicon.x ...
  • 删除此行: doc.setRootElement(FICHADAS); 因为你在这里设置了根元素: Document doc = new Document(FICHADAS); Remove this line: doc.setRootElement(FICHADAS); because you set the root element here: Document doc = new Document(FICHADAS);
  • 在您的read方法中,您可能想要更改此行: 的System.out.println(document.getContent()); 类似于: XMLOutputter xout = new XMLOutputter(Format.getPrettyFormat()); xout.output(document, System.out); 这将打印整个文档,而不仅仅是部分的toString() 。 然后,关于在write()方法中添加内容.... 您设置根元素: Document documen ...
  • 您需要将这些教师挂钩到正确的元素。 尝试这样的事情。 Element el = new Element("Teachers"); activity.addContent(el); for(Teacher teach : teacherList) { el.addContent(new Element("Teacher").addContent(new Element("Name").setText(teach.getFirstName() + " " + teach.getLastName()))) ...
  • 使用JDOM 2,您可以设置两个不同的XML读取器 - 每个架构一个。 然后,您可以使用SAXParser读取文档,并通过读者读取文档,并且无论哪个人通过模式是正确的。 考虑类似于( XMLReaderXSDFactory : sdfreader = new XMLReaderXSDFactory("http://www.es.ele.tue.nl/sdf3/xsd/sdf3-sdf.xsd"); csdfreader = new XMLReaderXSDFactory("http://www.es.ele ...
  • 从技术上讲,是....但....单引号和双引号之间没有任何语义差异....(来自JDOM的结果文档同样有效)....是否有一个非常好的理由为什么你需要去做这个? 如果有的话,我很想知道,也许将它作为JDOM的“原生”特征介绍.... 但是,您可以通过(仅)一点点工作来改变它的格式 - 大约15行代码......理论上JDOM2 API使这一点变得更容易 。 您可以使用AbstractXMLOutputProcessor的子类创建自己的XMLOutputProcessor并覆盖printAttribute() ...