Xpath - 如何获取元素的所有属性名称和值
问题描述:
我在java中使用xpath。我想获取元素的所有属性(名称&值)。我发现查询获取元素的属性值,现在我想单独获取属性名称或单个查询中的名称和值。Xpath - 如何获取元素的所有属性名称和值
<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/@*
。这将返回包含属性的节点集 节点。然后您可以迭代节点集。
如果您已经有一个上下文节点并希望在其下查找结果,则查询将为.//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");
以获取特定元素的属性,它的重复属性财产。
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();
}
答
我不得不这样做在Oracle Service Bus和有只使用XPath来创建一个缓存键,并且为我工作的解决方案做的是:
concat(
string-join(//*[string-length(normalize-space(string-join(text(), ''))) > 0]/concat(local-name(),
':',
normalize-space(string-join(text(), ''))), '_'),
'_',
string-join(//@*[normalize-space(.) != '']/concat(name(), ':', .), '_')
)
伟大答!我正在寻找这个!谢谢! (Btw ...有一个错字,它是字符串,而不是字符串) – 2010-10-26 07:09:19