使用 Java Dom 根据名称在 XMl 中查找标签是否存在

find if a tag exists by name in XMl using Java Dom

如何使用以下示例中的 Java Dom 检查 XML 中是否不存在特定子剂量:我正在寻找所有 userFiled 事件和在第一部分中,有 none。所以我想说如果没有标签userField做点什么。

<element class="AufOrgKombination" hash="AOK_1416092142370_76">
    <field name="layer">4</field>
    <field name="name">Function organisation unit combination 1</field>
    <field name="description"/>
</element>
<element class="AufOrgKombination" hash="AOK_1417643334024_77">
    <field name="layer">4</field>
    <field name="name">Function organisation unit combination 1</field>
    <field name="description"/>
    <userField hash="USERFIELD_1415779871581_0">3.0</userField>
    <userField hash="USERFIELD_1415779871581_0">N.A.</userField>
</element>

类似于:

NodeList NodeuserField = element.getElementsByTagName("userField");
Element line;

for (int j = 0, l = NodeuserField.getLength(); j < l; j++) {
    line = (Element) NodeuserField.item(j);
    for (Entry<String, String> userFieldUserDef : map_userField.entrySet()) {
        if (element.getElementsByTagName("hash") == null) {
                                //Do Something
        }
    }
}

就像在 I suggest using XPath again. You can do it via the Java XPath API (which sucks), or again use data projection 中一样(是的,我隶属于这个项目)。有几种可能性可以通过 XPath 确定元素是否存在。您可以尝试阅读它并测试结果是否为空。作为替代方案:直接声明布尔投影方法:

public class ElementExists {

    public interface Projection {

        interface Element {
            @XBRead("./@hash")
            String getHash();

            @XBRead("count(./userField)>0")
            boolean hasUserField();
        }

        @XBRead("//element")
        List<Element> getElements();
    }

    public static void main(final String[] args) throws IOException {
        Projection projection = new XBProjector().io().url("resource://data.xml").read(Projection.class);
        for (Projection.Element e : projection.getElements()) {
            System.out.print("Element with hash '" + e.getHash() + "' has ");
            System.out.println((e.hasUserField() ? "" : "no ") + "user field");
        }
    }
}

这个程序打印出来

Element with hash 'AOK_1416092142370_76' has no user field
Element with hash 'AOK_1417643334024_77' has user field