简体   繁体   中英

java xpath expression get only value if child node is different

I woudlike to get one specific value of node if child node is different like present in my expression :

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 DocumentBuilder builder = factory.newDocumentBuilder();
 document = builder.parse(new File("test.xml")); 

List<String> data = new ArrayList<>();
XPath xpath = XPathFactory.newInstance().newXPath();
NodeList nodes = (NodeList) xpath.evaluate("/name1/type/*[name()!= 'pmc']", document, XPathConstants.NODESET);
        for (int i = 0; i < nodes.getLength(); i++) {
            Element el = (Element) nodes.item(i);
            data.add(el.getAttribute("id"));
        }

System.out.println(data);

test.xml :

<?xml version="1.0" encoding="UTF-8"?>
<name1>
    <type id ="1">
        <coord>67</coord>
        <lmc>57657</lmc>
    </type>
    <lang>
        <eng>989</eng>
        <spa>123</spa>
    </lang>
</name1>
<name2>
    <type id ="2">
        <coord>534</coord>
        <lmc>654654</lmc>
    </type>
    <lang>
        <eng>354</eng>
        <spa>2424</spa>
    </lang>
</name2>
<name3>
    <type>
        <coord>23432</coord>
        <pmc>14324</pmc>
    </type>
    <lang>
        <eng>141</eng>
        <spa>142</spa>
    </lang>
</name3>

For example I wouldlike to get only the id if the childnode is 'pmc' and not the others.

Since the question isn't entirely clear, let's try it this way.

Assuming that your xml reads like this:

<?xml version="1.0" encoding="UTF-8"?>
<name1>
    <type id ="1">
        <coord>67</coord>
        <lmc>57657</lmc>
    </type>
    <lang>
        <eng>989</eng>
        <spa>123</spa>
    </lang>
</name1>
<name2>
    <type id ="2">
        <coord>534</coord>
        <lmc>654654</lmc>
    </type>
    <lang>
        <eng>354</eng>
        <spa>2424</spa>
    </lang>
</name2>
<name3>
    <type id ="3">
        <coord>23432</coord>
        <pmc>14324</pmc>
    </type>
    <lang>
        <eng>141</eng>
        <spa>142</spa>
    </lang>
</name3>

and that you are trying to get the value of the attribute <id> of any <type> node which has a <pmc> child node, try using the following as your xpath expression:

//*/type[pmc]/@id

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM