3

単純な XML があり、属性を取得したいと考えています。Web 上にいくつかの例がありますが、なぜ 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 ステートメントに追加すると、null 例外が発生します。出力は次のとおりです。

[xxxxxx-Set: null]
0
[xxxxxx-Set: null]
1
...
[xxxxxx-Set: null]
16
4

1 に答える 1

3

すべての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クラスの違いについては、ドキュメントを参照してください。

于 2013-02-07T13:27:19.230 に答える