【问题标题】:How to get unique value of repeated nodes using dom parser如何使用dom解析器获取重复节点的唯一值
【发布时间】:2014-12-22 06:27:28
【问题描述】:

我有一个包含重复节点的 XML,并且我使用 DOM 解析器对其进行顶部解析。经过大量的研发后,我可以在互联网上找到任何可以帮助我的东西。我的 xml 看起来像

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

任何建议我如何解析这个 xml 中的重复值。

【问题讨论】:

  • xslt 解决方案怎么样?
  • 您要获取所有唯一值还是删除重复值?
  • 我想获取所有节点的值。知道如何获得它吗?

标签: java xml parsing dom


【解决方案1】:

您可以使用 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)
    {
    }

希望对你有所帮助。

【讨论】:

  • 你测试过这个...对于我的 xml 它返回#text。
  • 不,我没有测试过。这只是给你的提示程序。我以前用过同样的东西。所以试试吧。
  • 我现在已经测试过了。我在打印中更改为 link.getTextContent()。这是类节点的结果:sas xcd asd
  • @Saiprateek - 你可以接受这个答案吗?如果是,请接受。
  • 我已经使用过这种方法,但正如我在 xml 中提到的,它为每个节点返回 #text
【解决方案2】:

您应该阅读所有元素,并在阅读后通过 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多