views:

344

answers:

1

I am using xpath in java. I want to get all the attributes (name & Value) of an element. I found the query to get the attribute values of an element, now I want to get attribute names alone or names and values in single query.

<Element1 ID="a123" attr1="value1" attr2="value2" attr3="value3" attr4="value4" attr5="value5" />

Here using the following query to get all the attribute values of Element1 XmlUtils.getAttributes(Path, String.format("//*/@*")); Using this format //*/@* I can get the values. result would be value1 value2 value3 value4 value5 a123

Now I want to know the query to get all the attribute names, or query to get all the attributes name and value.

+3  A: 

To select all attributes of all elements in the document named Element1: //Element1/@*. This will return a nodeset containing attribute nodes. You can then iterate the nodeset.

If you already have a context node and wish to find results under it, the query would be .//Element1/@*. This is usually more efficient than querying the entire document.

// input is an InputSource or a DOM node
NodeList nl = (NodeList) xpath.evaluate("//Element1/@*", input, XPathConstants.NODESET);
int length = nl.getLength();
for( int i=0; i<length; i++) {
    Attr attr = (Attr) nl.item(i);
    string name = attr.getName();
    string value = attr.getValue();
}

And it may be more efficient to find all elements of a given name using getElementsByTagName.

NodeList nl = document.getElementsByTagName("Element1"); 

To get the attributes of a particular element, iterate its attributes property.

NamedNodeMap nl = element.getAttributes();
int length = nl.getLength();
for( int i=0; i<length; i++) {
    Attr attr = (Attr) nl.item(i);
    string name = attr.getName();
    string value = attr.getValue();
}
Lachlan Roche
great ans! i was looking exactly for this! Thanks! (Btw... there's a typo, it's String, not string)
tony_le_montana