Я использую xpath в Java. Я хочу получить все атрибуты (имя и Значение) элемента. Я нашел, что запрос получил значения атрибута элемента, теперь я хочу получить одни только названия атрибута или имена и значения в едином запросе.
<Element1 ID="a123" attr1="value1" attr2="value2" attr3="value3" attr4="value4" attr5="value5" />
Здесь с помощью следующего запроса для получения всех значений атрибута Element1
XmlUtils.getAttributes(Path, String.format("//*/@*"));
Используя этот формат //*/@*
Я могу получить значения. результат был бы value1 value2 value3 value4 value5 a123
Теперь я хочу знать, что запрос заставляет все названия атрибута или запрос получать все имя атрибутов и значение.
Чтобы выбрать все атрибуты всех элементов в документе с именем Element1: //Element1/@*
. Это вернет nodeset, содержащий атрибуты узлов. Затем можно выполнить итерацию по набору узлов.
Если у вас уже есть контекстный узел и вы хотите найти результаты под ним, запрос будет .//Element1/@*
. Обычно это более эффективно, чем запрос ко всему документу.
// 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();
}
А поиск всех элементов с заданным именем может быть более эффективным, если использовать getElementsByTagName.
NodeList nl = document.getElementsByTagName("Element1");
Чтобы получить атрибуты конкретного элемента, выполните итерацию его свойства attributes.
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();
}