13

私はJavaで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

ここで、すべての属性名を取得するためのクエリ、またはすべての属性名と値を取得するためのクエリを知りたいと思います。

4

2 に答える 2

34

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();
}
于 2010-03-17T08:33:30.753 に答える
1

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(), ':', .), '_')
)
于 2015-06-06T14:24:40.813 に答える