You can totally do it without XPath, but it offers some unique features:
*you can select elements that contain certain text (case-sensitive) //a[contains(text(), "test")]
*you can select following siblings of the target element, or previous siblings, or all ancestors more simply than with CSS + or ~ operators //a[contains(text(), "test")]/following-sibling::p
I also like the ability to refer to already-scraped values in a list: the ones in the current row can be accessed using the variable name, or you can refer to previous rows or the list itself using listname[0], or do a Loop command through the list using its variable name