To select a node that partially matches a value, you can use the xpath contains()
function, like so:
//root/node[contains(text(), "needle")]
For example, let's suppose you have the following XML file:
<?xml version="1.0" encoding="UTF-8"?>
<customers>
<customer>
<name>John Doe</name>
<age>24</age>
<address>Gartenstraße 1, 10115 Berlin, Germany</address>
</customer>
<customer>
<name>Jane Doe</name>
<age>29</age>
<address>Bahnhofstrasse 1, 8001 Zürich, Switzerland</address>
</customer>
<customer>
<name>Bruce Wayne</name>
<age>39</age>
<address>123 Park Way, CA 92120, USA</address>
</customer>
</customers>
To select all customers with "Doe
" in the name, you would do the following:
//customers/customer/name[contains(text(), "Doe")]
This would result in the following matches:
<name>John Doe</name>
<name>Jane Doe</name>
To match values with special characters (for example, in foreign languages such as German), you can specify a collation as the third (optional) argument to the contains()
function.
Consider, for example, the following, where the specified collation equates "ss" to the (German) character "ß" ("sharp-s"):
//customers/customer/address[contains(text(), "straße", "http://www.w3.org/2013/collation/UCA?lang=de;strength=primary")]
This is the same as doing the following:
//customers/customer/address[contains(text(), "strasse", "http://www.w3.org/2013/collation/UCA?lang=de;strength=primary")]
Both of the expressions would result in the following matches:
<address>Gartenstraße 1, 10115 Berlin, Germany</address>
<address>Bahnhofstrasse 1, 8001 Zürich, Switzerland</address>
This post was published by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.