Find nodes that have a specific attribute
Syntax#
- Inside a specific node
- /path to/element[@attribute_name]
- Anywhere in the document
- //*[@attribute_name]
- Inside a specific node with some value
- /path to/element[@attribute_name=‘search value’]
- /path to/element[@attribute_name=“search value”]
- Anywhere in the document with some value
- //*[@attribute_name=‘search string’]
- //*[@attribute_name=“search string”]
Parameters#
Selector | function |
---|---|
@attribute_name | It selects the attribute value for a node, if present |
## Remarks# | |
Using [@attribute_name] we can select nodes that have the attribute irrespective of the value. |
We can use any of the functions or combination of the functions such as starts-with and lowercase, for example, with this selector to suit our needs.
Find nodes with a specific attribute
XML
<Galaxy>
<name>Milky Way</name>
<CelestialObject name="Earth" type="planet"/>
<CelestialObject name="Sun" type="star"/>
</Galaxy>
XPATH
/Galaxy/*[@name]
or
//*[@name]
OUTPUT
<CelestialObject name="Earth" type="planet" />
<CelestialObject name="Sun" type="star" />
Find nodes with a specific attribute value
XML
<Galaxy>
<name>Milky Way</name>
<CelestialObject name="Earth" type="planet"/>
<CelestialObject name="Sun" type="star"/>
</Galaxy>
XPATH
/Galaxy/*[@name='Sun']
or
//*[@name='Sun']
OUTPUT
<CelestialObject name="Sun" type="star" />
Find nodes by substring matching of an attribute’s value
XML
<Galaxy>
<name>Milky Way</name>
<CelestialObject name="Earth" type="planet"/>
<CelestialObject name="Sun" type="star"/>
</Galaxy>
XPATH
/Galaxy/*[contains(@name,'Ear')]
or
//*[contains(@name,'Ear')]
Double quotes can also be used in place of single quotes:
/Galaxy/*[contains(@name, "Ear")]
OUTPUT
<CelestialObject name="Earth" type="planet" />
Find nodes by substring matching of an attribute’s value (case-insensitive)
XML
<Galaxy>
<name>Milky Way</name>
<CelestialObject name="Earth" type="planet"/>
<CelestialObject name="Sun" type="star"/>
</Galaxy>
XPATH
/Galaxy/*[contains(lower-case(@name),'ear')]
or
//*[contains(lower-case(@name),'ear')]
or, with the string in double quotes:
//*[contains(lower-case(@name), "ear")]
OUTPUT
<CelestialObject name="Earth" type="planet" />
Find nodes by substring matching the start of an attribute’s value
XML
<Galaxy>
<name>Milky Way</name>
<CelestialObject name="Earth" type="planet"/>
<CelestialObject name="Sun" type="star"/>
</Galaxy>
XPATH
/Galaxy/*[starts-with(lower-case(@name),'ear')]
or
//*[starts-with(lower-case(@name),'ear')]
OUTPUT
<CelestialObject name="Earth" type="planet" />
Find nodes by substring matching the end of an attribute’s value
XML
<Galaxy>
<name>Milky Way</name>
<CelestialObject name="Earth" type="planet"/>
<CelestialObject name="Sun" type="star"/>
</Galaxy>
XPATH
/Galaxy/*[ends-with(lower-case(@type),'tar')]
or
//*[ends-with(lower-case(@type),'tar')]
OUTPUT
<CelestialObject name="Sun" type="star" />