XPath substring example
In this example, we will try to see how we can use the sub-string method in the XPath for our use-cases.
The sub-string method is used to search for the sub-string in the beginning or the end or anywhere in the XPath node. It can also be used to extract the part of the sub-string from the string by specifying the beginning index and end index.
The XPath provides following methods for this :
substring-before(String target, String tosearch)substring-after(String target, String tosearch)substring(String target, int startingindex, int length)
We will look at all the methods in brief and see how to use each of them.
cricketTeam_info.java:
<?xml version="1.0" encoding="UTF-8"?> <cricketers> <cricketer type="righty"> <name>MS Dhoni</name> <role>Captain</role> <position>Wicket-Keeper</position> </cricketer> <cricketer type="lefty"> <name>Shikhar Dhawan</name> <role>Batsman</role> <position>Point</position> </cricketer> <cricketer type="righty"> <name>Virat Kohli</name> <role>Batsman</role> <position>cover</position> </cricketer> <cricketer type="righty"> <name>Shami</name> <role>Bowler</role> <position>SquareLeg</position> </cricketer> <cricketer type="lefty"> <name>Zaheer Khan</name> <role>Bowler</role> <position>FineLeg</position> </cricketer> </cricketers>
1. substring(String target, int startingindex, int length)
Substring(target, startindex, length, ) method returns the sub-string of the target string from the start-index to the length specified. If the length argument is not provided, it returns the string from the start-index specified to the last character of the target string.
XPathExpression expr = xpath.compile("substring(//cricketer[name='MS Dhoni']/position,'1','4')");
String substr = (String) expr.evaluate(doc, XPathConstants.STRING);
System.out.println("The substring of Wicket is : " + substr );
Output:
The substring of Wicket is : Wick
The target string here is ‘wicket-keeper‘. By passing 1,4 we are extracting the characters from 1st to 4th position of the target string.
Unlike in Java, the XPath string index starts with 1.
2. substring-before(String target, String tosearch)
The substring-before is used to extract the substring of the target occurring before an occurrence of the string passed as toSearch argument. Lets look at an example to understand this :
expr = xpath.compile("substring-before(//cricketer[name='MS Dhoni']/position,'-Keeper')");
String substrbefore = (String) expr.evaluate(doc, XPathConstants.STRING);
System.out.println("The substring before Keeper is : " + substrbefore);
Output:
The substring before Keeper is : Wicket
The string occurring prior to “-Keeper” in “Wicket-Keeper” is returned by the substring-before method.
3. substring-after(String target, String tosearch)
This method works exactly opposite of the substring-before method. It returns the substring after the tosearch string till the end of the target string.
expr = xpath.compile("substring-after(//cricketer[name='MS Dhoni']/position,'Wicket-')");
String substrafter = (String) expr.evaluate(doc, XPathConstants.STRING);
System.out.println("The substring after Keeper is : " + substrafter);
Output:
The substring after Keeper is : Keeper
The substring-after returns the substring after the “Wicket“, which is “keeper“.
XpathSubStringDemo.java:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
public class XpathSubStringDemo
{
public static void main(String[] args) throws Exception
{
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setNamespaceAware(true);
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document doc = documentBuilder.parse("src/cricketTeam_info.xml");
XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
//XPath subtring example
XPathExpression expr = xpath.compile("substring(//cricketer[name='MS Dhoni']/position,'1','4')");
String substr = (String) expr.evaluate(doc, XPathConstants.STRING);
System.out.println("The substring before Keeper is : " + substr);
// XPath subtring-before example
expr = xpath.compile("substring-before(//cricketer[name='MS Dhoni']/position,'-Keeper')");
String substrbefore = (String) expr.evaluate(doc, XPathConstants.STRING);
System.out.println("The substring before Keeper is : " + substrbefore);
// XPath subtring-after example
expr = xpath.compile("substring-after(//cricketer[name='MS Dhoni']/position,'Wicket-')");
String substrafter = (String) expr.evaluate(doc, XPathConstants.STRING);
System.out.println("The substring after Keeper is : " + substrafter);
}
}
4. Conclusion:
Here we studied the sub-string method and how to use them.
You can download the source code of this example here: XpathSubStringDemo.zip
