JavaでいくつかのNodeListsを追加する

私は3つのNodeListsを追加して失敗することを何時間も試みてきました。手伝ってくれませんか?

私は次のコードを作った:

NodeList nList = root.getElementsByTagName("res");
NodeList nList2 = root.getElementsByTagName("agr");
NodeList nList3 = root.getElementsByTagName("rag");

NodeList allNodes = appendNodeLists(nList, nList2, nList3);

およびappendNodeListsメソッド:

   public static NodeList appendNodeLists(NodeList a, NodeList b, NodeList c)
   {
     NodeList nList;
       int aSize = a.getLength();
       int bSize = b.getLength();
       int cSize = c.getLength();
       if(aSize>0)
       {
           for (int i = 0; i < aSize; i++) 
               nList.item(i) = a.item(i);  //Error in this line
       }
       if(bSize>0)
       {
           for (int i = 0; i < bSize; i++) 
               nList.item(aSize+1+i) = b.item(i); //Error in this line                    
       }
       if(cSize>0)
       {
           for (int i = 0; i < bSize; i++)
               nList.item(aSize+bSize+1+i) = c.item(i);  //Error in this line            
       }

       return nList;
   }

私は間違って何をしていますか?私は3つのNodeListsを追加することはできませんし、理由を理解できないようです。

Btw、私は3つの行に同じエラーがあります: "予期しない型 - 必要な変数 - 見つかった値"。 なんでこんなことが起こっているの?

1
見たことある。私はそれを機能させるために管理してきました。とにかくありがとう
追加された 著者 SaintLike,

10 答え

1つの問題は次のとおりです。

nList.item(i)

あなたが値を設定しようとしているように、値を取得します。 nList.item(i)には何も割り当てることはできません。 NodeList インタフェース自体には、新しい項目をリストに追加する操作はありません。基本的な NodeList のタイプを見て、それにアイテムを追加できるかどうかを確認することができます。また、 nList 変数を構築していません。 NodeList はインタフェースです。あなたはそれを何とか作るつもりでしたか?

If you don't want that as a NodeList, you could very easily do it as a regular List instead. Something like this:

   List nodes = new ArrayList();
   int aSize = a.getLength();
   int bSize = b.getLength();
   int cSize = c.getLength();
   if(aSize>0)
   {
       for (int i = 0; i < aSize; i++) 
           nodes.add(a.item(i));
   }
   ...
2
追加された
ありがとう。私は彼らが通常のArrayListにある場合、ノードからサブ要素を取得できないと思います。それを行う方法はありますか?
追加された 著者 SaintLike,
ありがとう、ありがとう。それは働いている:)
追加された 著者 SaintLike,
もちろんできます。 ( NodeList と通常の List )に格納されているデータ構造にかかわらず、 NodeNode です。あなたが問題に遭遇した場合は、それを打ち返して投稿してください。
追加された 著者 cmbaxter,

1つの問題は次のとおりです。

nList.item(i)

あなたが値を設定しようとしているように、値を取得します。 nList.item(i)には何も割り当てることはできません。 NodeList インタフェース自体には、新しい項目をリストに追加する操作はありません。基本的な NodeList のタイプを見て、それにアイテムを追加できるかどうかを確認することができます。また、 nList 変数を構築していません。 NodeList はインタフェースです。あなたはそれを何とか作るつもりでしたか?

If you don't want that as a NodeList, you could very easily do it as a regular List instead. Something like this:

   List nodes = new ArrayList();
   int aSize = a.getLength();
   int bSize = b.getLength();
   int cSize = c.getLength();
   if(aSize>0)
   {
       for (int i = 0; i < aSize; i++) 
           nodes.add(a.item(i));
   }
   ...
2
追加された
ありがとう。私は彼らが通常のArrayListにある場合、ノードからサブ要素を取得できないと思います。それを行う方法はありますか?
追加された 著者 SaintLike,
ありがとう、ありがとう。それは働いている:)
追加された 著者 SaintLike,
もちろんできます。 ( NodeList と通常の List )に格納されているデータ構造にかかわらず、 NodeNode です。あなたが問題に遭遇した場合は、それを打ち返して投稿してください。
追加された 著者 cmbaxter,

NodeList では公開されていないためその状態を変更するには、独自のバージョンを実装してリストを連結することができます。

  public static NodeList join(final NodeList... lists) {
    class JoinedNodeList implements NodeList {
      @Override
      public int getLength() {
        int len = 0;
        for (NodeList list : lists) {
          len += list.getLength();
        }
        return len;
      }

      @Override
      public Node item(int index) {
        for (NodeList list : lists) {
          if (list.getLength() > index) {
            return list.item(index);
          } else {
            index -= list.getLength();
          }
        }
        return null;
      }
    }

    return new JoinedNodeList();
  }
0
追加された

NodeList では公開されていないためその状態を変更するには、独自のバージョンを実装してリストを連結することができます。

  public static NodeList join(final NodeList... lists) {
    class JoinedNodeList implements NodeList {
      @Override
      public int getLength() {
        int len = 0;
        for (NodeList list : lists) {
          len += list.getLength();
        }
        return len;
      }

      @Override
      public Node item(int index) {
        for (NodeList list : lists) {
          if (list.getLength() > index) {
            return list.item(index);
          } else {
            index -= list.getLength();
          }
        }
        return null;
      }
    }

    return new JoinedNodeList();
  }
0
追加された

NodeList by itself is pretty basic and is used just to iterate over the Nodes. To create a new NodeList use an Element after passing the root Document object to your method as follows.

public static NodeList appendNodeLists(Document root,
                                       NodeList a, NodeList b, NodeList c)
{
    Element allNodes = root.createElement("allNodes");

    for (int i = 0; i < a.getLength(); i++)
        allNodes.appendChild(a.item(i));

    for (int i = 0; i < b.getLength(); i++) 
        allNodes.appendChild(b.item(i));

    for (int i = 0; i < c.getLength(); i++)
        allNodes.appendChild(c.item(i));

    return allNodes.getChildNodes();
}
0
追加された

NodeList by itself is pretty basic and is used just to iterate over the Nodes. To create a new NodeList use an Element after passing the root Document object to your method as follows.

public static NodeList appendNodeLists(Document root,
                                       NodeList a, NodeList b, NodeList c)
{
    Element allNodes = root.createElement("allNodes");

    for (int i = 0; i < a.getLength(); i++)
        allNodes.appendChild(a.item(i));

    for (int i = 0; i < b.getLength(); i++) 
        allNodes.appendChild(b.item(i));

    for (int i = 0; i < c.getLength(); i++)
        allNodes.appendChild(c.item(i));

    return allNodes.getChildNodes();
}
0
追加された

NodeListを本当に使いたい場合は、これを行うことができます:

nList.item(i).setNodeValue(a.item(i).getNodeValue());

しかし、これを行うためのよりよい方法は、CMSbaxterとしてのリストを提案することです。

List nodes = new ArrayList();
0
追加された

NodeListを本当に使いたい場合は、これを行うことができます:

nList.item(i).setNodeValue(a.item(i).getNodeValue());

しかし、これを行うためのよりよい方法は、CMSbaxterとしてのリストを提案することです。

List nodes = new ArrayList();
0
追加された

私はちょうどこれを行いました - あなたが子供を追加すると、実際にはある要素から別の要素に移動しているので、インデックス番号は変わりません。

public void appendNodeList(Element TargetElement, NodeList nl) {

    int cnt = nl.getLength();

    for (int i=0; i
0
追加された

私はちょうどこれを行いました - あなたが子供を追加すると、実際にはある要素から別の要素に移動しているので、インデックス番号は変わりません。

public void appendNodeList(Element TargetElement, NodeList nl) {

    int cnt = nl.getLength();

    for (int i=0; i
0
追加された