如何使用dom解析器获取重复节点的唯一值

时间:2014-12-22 06:27:29

标签: java xml parsing dom

我有一个重复节点的XML,我使用DOM解析器进行顶级解析。经过很多研发后,我可以在互联网上找到任何可以帮助我的东西。我的xml看起来像

<nos1>
  <Name>aqwer</Name>
  <class>sas</class>
  <class>xcd</class>
  <class>asd</class>
  <Name>cfg</Name>
  <Name>cfg</Name>
<nos1>

任何建议如何解析此xml的重复值。

2 个答案:

答案 0 :(得分:2)

您可以使用w3c dom文档解析XML,如下所示:

    DocumentBuilderFactory df = DocumentBuilderFactory.newInstance();

    try
    {
        DocumentBuilder db = df.newDocumentBuilder();
        InputStream is = new ByteArrayInputStream(response.getContent().getBytes("UTF-8"));
        org.w3c.dom.Document doc = db.parse(is);
        NodeList links = doc.getElementsByTagName("class");
          for(int i=0; i< links.getLength(); i++)
          {
             Node link = links.item(i);
             System.out.println(link.getTextContent());
          }
    }
    catch(Exception ex)
    {
    }

希望这会对你有所帮助。

答案 1 :(得分:1)

您应阅读所有元素,阅读后通过Set删除重复项。以下是使用XMLBeam的示例,但任何其他库都可以。

public class TestMultipleElements {

@XBDocURL("resource://test.xml")
public interface Projection {
    @XBRead("/nos1/Name")
    List<String> getNames();

    @XBRead("/nos1/class")
    List<String> getClasses();

}

@Test
public void uniqueElements() throws IOException {
    Projection projection = new XBProjector().io().fromURLAnnotation(Projection.class);
    for (String name : new HashSet<String>(projection.getNames())) {
        System.out.println("Found Name:" + name);
    }
    for (String clazz : new HashSet<String>(projection.getClasses())) {
        System.out.println("Found Name:" + clazz);
    }

}
}

打印出来:

Found Name:aqwer
Found Name:cfg
Found Name:xcd
Found Name:sas
Found Name:asd