0

xml内の特定の名前を持つ要素の数を取得したい。name = "while")

問題は、次のコードを使用すると、この名前のトップレベルの要素しか取得できないことです-

       for ( Iterator i = root.elementIterator( "while" ); i.hasNext(); ) {
            Element foo = (Element) i.next();

ただし、下位レベルの「while」要素はイテレータの一部ではありません。

name = "while"を持つすべての要素(トップレベルまたは下位レベル)を取得する最も効率的な方法は何ですか?この目的のために、ドキュメント内のすべての要素を解析する必要がありますか?

4

3 に答える 3

1

//whileまたはname()関数とワイルドカードノードを使用してXPathを使用でき*ます。//*[name() = 'while']

List list = document.selectNodes("//*[name() = 'while']"); // or "//while"
int numberOfNodes = list.size();
for (Iterator iter = list.iterator(); iter.hasNext(); ) {
    // do something
}
于 2012-06-11T13:44:19.087 に答える
1

この正規表現は私のために働いた:

document.selectNodes(".//*")
于 2016-11-29T14:28:57.240 に答える
0

Element Iterator は、xPath の次のレベルでのみ機能します。すべての XML を解析してすべての Element を取得できるようにするには、再帰を使用する必要があります。たとえば、次のコードは「name」を持つすべてのノードのリストを返します

public List<Element> getElementsByName(String name, Element parent, List<Element> elementList)
{
    if (elementList == null)
        elementList = new ArrayList<Element>();

    for ( Iterator i = parent.elementIterator(); i.hasNext(); ) {
        Element current = (Element) i.next();
        if (current.getName().equalsIgnoreCase(name))
        {
            elementList.add(current);
        }

        getElementsByName(name, current, elementList);
    }
    return elementList;
}
于 2014-09-15T11:18:59.563 に答える