-2

こんにちは、ユーザーの選択に基づいて XML を解析し、リストを表示したいと考えています

私のxmlはこのようになっています

ここに画像の説明を入力

以下は私のコードです

      try {
            XMLParser parser = new XMLParser();
            Document doc = parser.getDomElement(xml); // getting DOM element
            NodeList n1 = doc.getElementsByTagName("company");

            // looping through all item nodes <item>
            for (int i = 0; i < n1.getLength(); i++) {
                // creating new HashMap
                Element e = (Element) n1.item(i);

                System.out.println("name node "+parser.getValue(e, "name"));
            }

このようにして、次のような出力が得られます

  Company ABC
  Company XYZ

企業一覧

しかし、
私は次のようなコードを書きます

        NodeList n1 = doc.getElementsByTagName("province"); 
        // looping through all item nodes <item>
            for (int i = 0; i < n1.getLength(); i++) {
                // creating new HashMap
                Element e = (Element) n1.item(i);

                System.out.println("name node "+parser.getValue(e, "name"));
            }

私は州名のリストを取得しています

   Alberta
   Ontario
   New York
   Florida

しかし、それはこのように動作するはずです

会社ABCを選択した場合

2 つのプロビジョニング リストのみが表示されます

       Alberta
       Ontario

すべてを表示する必要はありません

4

5 に答える 5

1

これはそれを行う必要があります:

        XMLParser parser = new XMLParser();
        Document doc = parser.getDomElement(xml); // getting DOM element
        NodeList n1 = doc.getElementsByTagName("company");

        // looping through all item nodes <item>
        for (int i = 0; i < n1.getLength(); i++) {
            Element e = (Element) n1.item(i);
            System.out.println("name node "  +parser.getValue(e, "name"));
            NodeList children = e.getChildNodes();
            for (int j = 0; j < children.getLength(); j++) {
                 Node child = children.item(j);
                 if (child.getNodeName().equalsIgnoreCase("province")) {
                      System.out.println("name node " + parser.getValue((Element)child, "name"));
                 }
            }
        }
于 2013-02-05T11:58:22.707 に答える
1

Node.getChildNodes()「会社」ノードで使用します。次に、子の州ノードを取得するために、名前で比較します。例:

    XMLParser parser = new XMLParser();
    Document doc = parser.getDomElement(xml); // getting DOM element
    NodeList n1 = doc.getElementsByTagName("company");

    // looping through all item nodes <item>
    for (int i = 0; i < n1.getLength(); i++) {
        Node companyNode = n1.item(i);
        NodeList childNodes = companyNode.getChildNodes();
        // Here we're getting child nodes inside the company node.
        // Only direct childs will be returned (name and province)  

        for (int j = 0; j < childNodes.getLength(); j++) {
            Node childNode = childNodes.item(j);
            if("province".equalsIgnoreCase(childNode.getName())){
                //Do something with province
            }
        }
    }
于 2013-02-05T11:49:21.233 に答える
1

次のコードを試してください。

public class MainActivity  extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    /** Create a new layout to display the view */
    LinearLayout layout = new LinearLayout(this);
    layout.setOrientation(1);

    /** Create a new textview array to display the results */
    TextView name[];
    TextView website[];
    TextView category[];

    try {

        URL url = new URL(
                "http://xyz.com/aa.xml");
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(new InputSource(url.openStream()));
        doc.getDocumentElement().normalize();

        NodeList nodeList = doc.getElementsByTagName("item");

        /** Assign textview array lenght by arraylist size */
        name = new TextView[nodeList.getLength()];
        website = new TextView[nodeList.getLength()];
        category = new TextView[nodeList.getLength()];

        for (int i = 0; i < nodeList.getLength(); i++) {

            Node node = nodeList.item(i);

            name[i] = new TextView(this);
            website[i] = new TextView(this);
            category[i] = new TextView(this);

            Element fstElmnt = (Element) node;
            NodeList nameList = fstElmnt.getElementsByTagName("name");
            Element nameElement = (Element) nameList.item(0);
            nameList = nameElement.getChildNodes();
            name[i].setText("Name = "
                    + ((Node) nameList.item(0)).getNodeValue());

            NodeList websiteList = fstElmnt.getElementsByTagName("website");
            Element websiteElement = (Element) websiteList.item(0);
            websiteList = websiteElement.getChildNodes();
            website[i].setText("Website = "
                    + ((Node) websiteList.item(0)).getNodeValue());

            category[i].setText("Website Category = "
                    + websiteElement.getAttribute("category"));

            layout.addView(name[i]);
            layout.addView(website[i]);
            layout.addView(category[i]);

        }
    } catch (Exception e) {
        System.out.println("XML Pasing Excpetion = " + e);
    }

    /** Set the layout view to display */
    setContentView(layout);

}
}
于 2013-10-21T23:56:56.260 に答える
0

ドキュメントオブジェクトで呼び出されたgetElementsBytagNameは、ドキュメント全体で指定されたタグ名を持つすべてのノードのリストを常に返します。代わりに、関心のある単一の会社要素を除外してから、その要素でgetElementsByTagNameを呼び出します。例えば

Element companyEl = doc.getElementById(desiredCompanyId);
if (companyEl != null) { // always good to check
    NodeList n1 = companyEl.getElementsByTagName("province");

    // your code here
}
于 2013-02-05T11:59:44.500 に答える
0

このコードで試してください

for (int i = 0; i < nodeList.getLength(); i++) {

        Node node = nodeList.item(i);

        name[i] = new TextView(this);
        website[i] = new TextView(this);
        category[i] = new TextView(this);

        Element fstElmnt = (Element) node;
        NodeList nameList = fstElmnt.getElementsByTagName("name");
        Element nameElement = (Element) nameList.item(0);
        nameList = nameElement.getChildNodes();
        name[i].setText("Name = "
                + ((Node) nameList.item(0)).getNodeValue());

        NodeList websiteList = fstElmnt.getElementsByTagName("website");
        Element websiteElement = (Element) websiteList.item(0);
        websiteList = websiteElement.getChildNodes();
        website[i].setText("Website = "
                + ((Node) websiteList.item(0)).getNodeValue());

        category[i].setText("Website Category = "
                + websiteElement.getAttribute("category"));

        layout.addView(name[i]);
        layout.addView(website[i]);
        layout.addView(category[i]);

    }
于 2013-12-04T13:56:19.913 に答える