我有org.w3c.dom.NodeList
个5个节点。由UUID.randomUUID();
Dom结构:
<section id="3" prefix="s1">
<paragraph id="value3">
...
</paragraph>
<paragraph id="value4">
...
</paragraph>
<paragraph id="value5">
...
</paragraph>
<paragraph id="value6">
...
</paragraph>
<paragraph id="value7">
...
</paragraph>
</section>
我需要在节点之后获取属性id =&#34; value5&#34;的所有节点。因此结果应该包含id = value6和id = value7的节点。
我创建了Stream<Element>
:
NodeList children = element.getChildNodes();
Stream<Element> elementStream = IntStream.range(0, children.getLength())
.mapToObj(children::item)
.filter(Element.class::isInstance)
.map(Element.class::cast);
那么,我能以某种方式使用Java 8 Stream API吗?
答案 0 :(得分:3)
不幸的是,DOM API与其他API不兼容。我在this earlier answer中提供了一个有用的轻量级List
包装器。
有了这个,你可以做到:
List<Node> list = XmlUtil.asList(element.getChildNodes());
list = list.subList(
list.indexOf(element.getOwnerDocument().getElementById("value5"))+1, list.size());
Stream<Element> stream = list.stream()
.filter(Element.class::isInstance).map(Element.class::cast);
或
List<Node> list = XmlUtil.asList(element.getChildNodes());
Stream<Element> stream = IntStream.range(
list.indexOf(element.getOwnerDocument().getElementById("value5"))+1, list.size())
.mapToObj(list::get).filter(Element.class::isInstance).map(Element.class::cast);
答案 1 :(得分:2)
你的问题很安静。但是,如果您只需要在具有特定属性的Element之后获取节点并对它们进行排序,则可以尝试按其属性过滤元素:
xx.cloudfront.net/info.html?user=foo