Sample code for 30+ languages & platforms
Java

XML SearchForAttribute Method

See more XML Examples

Demonstrates the SearchForAttribute method.

The input XML, available at http://www.chilkatsoft.com/data/fruitSearch.xml, is this:

<root>
    <searchRoot>
        <fruit color="red">apple</fruit>
        <fruit color="green">pear</fruit>
        <veg color="orange">carrot</veg>
        <meat animal="cow">beef</meat>
        <xyz>
            <fruit color="blue">blueberry</fruit>
            <veg color="green">broccoli</veg>
        </xyz>
        <fruit color="purple">grape</fruit>
        <cheese color="yellow">cheddar</cheese>
    </searchRoot>
    <fruit color="red">strawberry</fruit>
    <fruit color="orange">peach</fruit>
</root>

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Xml;

public class ChilkatExample {

    public static void main(String[] args) {
        boolean success = false;

        Xml xml = new Xml();

        try {
            xml.loadXmlFile("qa_data/xml/fruitSearch.xml");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Search the sub-tree rooted at "searchRoot";
        Xml xSearchRoot = xml.findChild("searchRoot");
        if (xSearchRoot == null) {
            System.out.println("searchRoot not found, searching from root.");
            xSearchRoot = xml.getRoot();
        }

        // Search for all "fruit" nodes having a color attribute
        // where the name of the color ends in "e";
        Xml xBeginAfter = xSearchRoot.getSelf();
        Xml xFound = xSearchRoot.searchForAttribute(xBeginAfter, "fruit", "color", "*e");
        while (xSearchRoot.getLastMethodSuccess()) {
            System.out.println(xFound.getContent() + ": " + xFound.getAttrValue("color"));

            xBeginAfter.close();
            xBeginAfter = xFound;
            xFound = xSearchRoot.searchForAttribute(xBeginAfter, "fruit", "color", "*e");
        }

        // The correct output is:
        // grape: purple
        // blueberry: blue

        xBeginAfter.close();

        System.out.println("--------------------------");

        // ---------------------------------------------------------------------------------
        // Now do the same, but instead use SearchForAttribute2
        // which updates the internal reference of the caller instead
        // of returning the found node.

        xBeginAfter = xSearchRoot.getSelf();
        Xml xSearch = xSearchRoot.getSelf();

        try {
            xSearch.searchForAttribute2(xBeginAfter, "fruit", "color", "*e");
            success = true;
        } catch (ChilkatException e) {
            success = false;
        }
        while (success) {
            System.out.println(xSearch.getContent() + ": " + xSearch.getAttrValue("color"));

            // Copy the internal references so that the next search
            // begins after the found node.
            xBeginAfter.copyRef(xSearch);
            xSearch.copyRef(xSearchRoot);

            xSearch.searchForAttribute2(xBeginAfter, "fruit", "color", "*e");
        }

        xSearch.close();
        xBeginAfter.close();

        xSearchRoot.close();
    }
}