我有一个简单的XML,我想获取属性。网络上有一些示例,但是我仍然不明白为什么只看到4时我得到17。我什至试图计算我认为文本可能出现的位置,但是除非长度是多少,否则我仍然不会得到该数字。输出的。这导致我不知道如何获取所有Tag3的属性名称。

<?xml version="1.0" encoding="UTF-8"?>
<tag1 xmlns="something">
    <xxxxxx-Set>
        <tag3 Name="a"/>
        <tag3 Name="b"/>
        <tag3 Name="c"/>
        <tag3 Name="d"/>
    </xxxxxx-Set>
    <tagB>
        <tag3 Name="a"/>
        <tag3 Name="b"/>
        <tag3 Name="c"/>
        <tag3 Name="d"/>
    </tagB>
</tag1>

这是我的Java代码:
import java.io.File;
import java.util.Arrays;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;


public class ParseXML {


    public static void main(String[] args) {
        try {

            File test= new File("test.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(test);

            NodeList tagAs= doc.getElementsByTagName("xxxxxx-Set").item(0).getChildNodes(); //should be all the tag3 elements?

            for(int i = 0; i < tagAs.getLength(); i++)    {
                System.out.println(tagAs);
                System.out.println(i);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

注意:将.getAttributes()。getNamedItem(“Name”)。getNodeValue()添加到print语句会给我带来空异常。
输出为:
[xxxxxx-Set: null]
0
[xxxxxx-Set: null]
1
...
[xxxxxx-Set: null]
16

最佳答案

如果要使用所有Name属性(最好使用小写字母命名),请使用以下方法:

Element xSet = (Element) doc.getElementsByTagName("xxxxxx-Set").item(0);
NodeList xSetTags = xSet.getElementsByTagName("tag3");

for(int i = 0; i < xSetTags.getLength(); i++)    {
    Element tag3 = (Element) xSetTags.item(i);
    System.out.println(tag3.getAttribute("Name"));
}

我是使用org.w3c.dom.Element类实现的。使用 org.w3c.dom.Node 并不是最好的主意,因为此类不仅表示xml元素,而且还表示属性,注释和其他内容。查看文档以了解NodeElement类之间的区别。

关于java - 子节点过多,无法获取属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14751776/

10-11 02:44
查看更多