【问题标题】:Java - Dom4j Select Child NodeJava - Dom4j 选择子节点
【发布时间】:2020-07-05 09:56:31
【问题描述】:

我使用 Dom4j 解析 XML 数据。如何在子节点 tileXtileY 中获取 pos 值,如果为空则跳过?

数据/background_item.xml:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <item>
        <id>0</id>
        <layer>1</layer>
        <dx>-17</dx>
        <dy>-3</dy>
        <tileX>
            <pos>1</pos>
            <pos>2</pos>
        </tileX>
        <tileY>
            <pos>1</pos>
            <pos>2</pos>
        </tileY>
    </item>
    <item>
        <id>1</id>
        <layer>4</layer>
        <dx>1</dx>
        <dy>5</dy>
        <tileX></tileX>
        <tileY></tileY>
    </item>
</root>

Java 代码:

try {
    ArrayList<BgItem> bgItem = new ArrayList<>();
    SAXReader reader = new SAXReader();
    Document doc = reader.read(new File("data/background_item.xml"));
    Element root = doc.getRootElement();
    Iterator<Element> it = root.elementIterator();
    while (it.hasNext()) {
        Element el = it.next();
        BgItem bg = new BgItem();
        bg.id = Short.parseShort(el.elementTextTrim("id"));
        bg.layer = Byte.parseByte(el.elementTextTrim("layer"));
        bg.dx = Integer.parseInt(el.elementTextTrim("dx"));
        bg.dy = Integer.parseInt(el.elementTextTrim("dy"));
        bg.tileX = new ArrayList<>();
        bg.tileY = new ArrayList<>();
        
        // select tileX, tileY node ???
        
        bgItem.add(bg);
    }
    System.out.println("- Total background item: " + bgItem.size());
} catch (IOException | DocumentException | NumberFormatException e) {
    e.printStackTrace(System.out);
}

【问题讨论】:

    标签: java dom4j


    【解决方案1】:

    在您的 while 循环中,它应该如下所示:

        Element xTileEle = el.element("tileX");
        for (Object posEle : xTileEle.elements("pos")) {
            tileX.add(((Element)posEle).getTextTrim());
        }
    

    要跳过空白,只需检查xTileEle 是否为空。

    【讨论】:

      猜你喜欢
      • 2012-10-07
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多