I can search for a String contained in an specific attribute if I use the following XPath
/xs:schema/node()/descendant::node()[starts-with(@my-specific-attribute-name-here, 'my-search-string')]
However, I'd like to search for ANY attribute containing* a String
We can identify elements by partially comparing to its attributes in Selenium with the help of regular expression. In xpath, there is contains () method. It supports partial matching with the value of the attributes. This method comes as useful while dealing with elements having dynamic values in their attributes.
/* selects the root element, regardless of name. ./* or * selects all child elements of the context node, regardless of name.
The local-name function returns a string representing the local name of the first node in a given node-set.
Sample XML:
<root>
<element1 a="hello" b="world"/>
<element2 c="world" d="hello"/>
<element3 e="world" f="world"/>
</root>
Suppose, we need to select elements which have any attribute containing h
. In this sample: element1
, element2
. We can use this XPath:
//*[@*[starts-with(., 'h')]]
In your sample:
/xs:schema/node()/descendant::node()
[@*[starts-with(@my-specific-attribute-name-here, 'my-search-string')]]
The general pattern you're looking for is:
@*[contains(., 'string')]
which will match any attribute on the context element that contains string
. So if you simply want to search the whole document for attributes containing string
, you'd use:
//@*[contains(., 'string')]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With