使用 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
如何使用以下示例中的 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
}
}
}
就像在
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