java获取XML元素中所有属性的列表或名称

yos*_*ssi 4 java xml xpath dom

我有一个xml元素

   <base baseAtt1="aaa" baseAtt2="tt">
        <innerElement att1="one" att2="two" att3="bazinga"/>
   </base>
Run Code Online (Sandbox Code Playgroud)

我想得到属性列表.对于两个基本元件和内部元件.

不知道 innerElement的名称,它可以有许多不同的名称.

 NodeList baseElmntLst_gold  = goldAnalysis.getElementsByTagName("base");
 Element baseElmnt_gold = (Element) baseElmntLst_gold.item(0);
Run Code Online (Sandbox Code Playgroud)

目标是获得一种字典作为输出,

例如,对于上面的xml,输出将是具有那些valuse的字典.

baseAtt1 = "aaa"
baseAtt2 = "tt"
att1 = "one"
att2 = "two"
att3 = "bazinga"
Run Code Online (Sandbox Code Playgroud)

我正在使用jre 1.5

Grz*_*ski 9

这里是基于纯DOM的解决方案(但是在Java中将XPath与DOM结合起来并没有错):

NodeList baseElmntLst_gold  = goldAnalysis.getElementsByTagName("base");
Element baseElmnt_gold = (Element) baseElmntLst_gold.item(0);

NamedNodeMap baseElmnt_gold_attr = baseElmnt_gold.getAttributes();
for (int i = 0; i < baseElmnt_gold_attr.getLength(); ++i)
{
    Node attr = baseElmnt_gold_attr.item(i);
    System.out.println(attr.getNodeName() + " = \"" + attr.getNodeValue() + "\"");
}

NodeList innerElmntLst_gold = baseElmnt_gold.getChildNodes();
Element innerElement_gold = null;
for (int i = 0; i < innerElmntLst_gold.getLength(); ++i)
{
    if (innerElmntLst_gold.item(i) instanceof Element)
    {
        innerElement_gold = (Element) innerElmntLst_gold.item(i);
        break; // just get first child
    }
}

NamedNodeMap innerElmnt_gold_attr = innerElement_gold.getAttributes();
for (int i = 0; i < innerElmnt_gold_attr.getLength(); ++i)
{
    Node attr = innerElmnt_gold_attr.item(i);
    System.out.println(attr.getNodeName() + " = \"" + attr.getNodeValue() + "\"");
}
Run Code Online (Sandbox Code Playgroud)

结果:

baseAtt1 = "aaa"
baseAtt2 = "tt"
att1 = "one"
att2 = "two"
att3 = "bazinga"
Run Code Online (Sandbox Code Playgroud)