【问题标题】:XML Parsing using JDOM (node and attribute value)使用 JDOM 解析 XML(节点和属性值)
【发布时间】:2014-01-28 11:38:46
【问题描述】:

这是示例 XML,假设我要提取数据“DEF”。知道如何通过组合节点和属性值来提取,即节点应该是“容器”,属性值应该是“2”?我是 JDOM 和 XML 解析的新手。请提出您的建议。

<?xml version="1.0"?>
<Product>
    <Property>
        <Container value="1">ABC</Container>
        <Container value="2">DEF</Container>
        <Container value="3">GHI</Container>
    </Property>
</Product>

【问题讨论】:

    标签: xml parsing jdom


    【解决方案1】:

    喜欢这个

    import java.io.File;
    import java.io.IOException;
    import java.util.List;
    
    import org.jdom2.Attribute;
    import org.jdom2.Document;
    import org.jdom2.Element;
    import org.jdom2.JDOMException;
    import org.jdom2.input.SAXBuilder;
    import org.xml.sax.Attributes;
    
    public class ReadXMLFile {
        public static void main(String[] args) {
    
            SAXBuilder builder = new SAXBuilder();
            File xmlFile = new File("src/jdom.xml");
    
            try {
    
                Document document = (Document) builder.build(xmlFile);
                Element rootNode = document.getRootElement();
                Element element = rootNode.getChild("Property");
                List list = element.getChildren("Container");
    
                for (int i = 0; i < list.size(); i++) {
    
                    Element node = (Element) list.get(i);
    
                    Attribute value = node.getAttribute("value");
                    if ((value.getValue().equals("2"))) {
                        System.out.println(value.getValue());
    
                        System.out.println("values : " + node.getText());
                    }
    
                }
    
            } catch (IOException io) {
                System.out.println(io.getMessage());
            } catch (JDOMException jdomex) {
                System.out.println(jdomex.getMessage());
            }
        }
    }
    

    【讨论】:

    • 这是 JDOM 1.x 的一个很好的例子 对于 JDOM 2.x,您可能会认为 for 循环比 for (Element node : element.getChildren("Container")) { .... 更好。得到了我的 +1。谢谢
    • @rolfl 是的 for 循环也可以这样工作 :) 只是想知道 JDOM 是否比其他解析器更好?或者 JDOM 的优势是什么?
    • @SumitSahoo - 我有偏见,我是 JDOM 的维护者。此外,JDOM 不是解析器,它只是让使用解析器变得非常非常容易。 ;-)
    • @rolfl ... 是的,前几天我读到它使用标准的 Java 解析器,但它处理内存的效率有点高。我说的对吗?
    • 这是一个公平的总结。最好将它与 DOM(JDOM 替代)进行比较。 JDOM 是为 Java 设计的(与 DOM 不同),它允许所有传统的 Java 功能工作 - 泛型、集合、枚举等。它只是按照 Java 人所期望的方式工作。阅读JDOM Getting Started
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    相关资源
    最近更新 更多