0

我有一个由元素 xx 和 xxt 组成的 xml。每个 xxt 包含一个或多个 xx 元素。每个 xx 都有一个“cap”和“act”属性。我需要做的是将所有的 cap-act 值存储在一个地图中。

现在请注意,我的 xml 可以包含 0 或不定数量的 xxt。因此,这应该递归地完成。现在,我只是在没有 xxt 元素时进行了简单的解析:

  for (Element element: (List<Element>) minfo.elements()) {
        if (element.getName().equals("xx")) {
            String cap = element.attributeValue("cap").trim();
            String act = element.attributeValue("act").trim();
            map.put(cap,act);
        }
        else if(element.getName().equals(xxt)){
            //TODO recursive method 
        }
    }

xml 的一个示例可能是这样的:

    <xx cap="Min" act="act1"/>
    <xx cap="Ver" act="asd" />
    <xx cap="Tan" act="fw" />
    <xxt id="PR" cap="A">
      <xx cap="tY" act="ate" />
      <xx cap="Tn" act="bga" />
      <xx cap="Tn" act="sga" />
      <xxt cap="an" act="y34" />
          <xx cap="Miu" act="sahg"/>
      </xxt>
    </xxt>
    <xx cap="Mzt" act="act1"/>
4

1 回答 1

1

您只需要创建一个方法,该方法接收节点参数以分析并遍历其子节点。

找到“xx”后,将其添加到地图中。当找到 'xxt' 时,您通过将 'xxt' 节点作为参数传递来调用该函数。

public function void analyze(Element element) {
    for (Element child : (List<Element>) element.elements()) {
        if (child.getName().equals("xx")) {
            String cap = child.attributeValue("cap").trim();
            String act = child.attributeValue("act").trim();
            map.put(cap,act);
        } else if(child.getName().equals("xxt")){
            analyze(child);
        }
    }
}

// To start recursivity
analyze(minfo);

这段代码不会编译,但它是给你一个例子。

于 2012-10-25T07:13:23.583 回答