2016-06-25 5 views
-1

私はこのメソッドを持っていますが、私は同じクライアントからすべての注文を削除する必要があります。ここで私はここにWhile(web services netbeans)

<encomendas> 
    <encomenda cod="enc4" data="2016-04-23" cliente="cli5" status="pendente"> 
     <enc quant="3">9789722523288</enc> 
     <enc quant="1">9789726656272</enc> 
    </encomenda> 
    <encomenda cod="enc5" data="2016-05-16" cliente="cli7" status="pendente"> 
     <enc quant="1">9789720043702</enc> 
     <enc quant="1">9789724146348</enc> 
     <enc quant="2">9789724121390</enc> 
     <enc quant="1">9789720046451</enc> 
    </encomenda> 
    <encomenda cod="enc6" data="2016-04-23" cliente="cli5" status="pendente"> 
     <enc quant="3">9789722523288</enc> 
     <enc quant="1">9789726656272</enc> 
    </encomenda> 
</encomendas> 

を除去していたから.xmlファイルは、私が

@WebMethod(operationName = "removeorder2") 
public String removeorder2(@WebParam(name = "cliente") String id) { 
    URL u = this.getClass().getResource("orders.xml"); 
    Document doc = XMLJDomFunctions.lerDocumentoXML(u.getFile()); 
    Element encomendas = doc.getRootElement(); 
    for (int i = 0; i < encomendas.getChildren().size(); i++) { 
     Element filho = encomendas.getChildren().get(i); 
     if (filho.getAttribute("cliente").getValue().equals(id)) { 
      encomendas.getChildren().remove(i); 
      XMLJDomFunctions.escreverDocumentoParaFicheiro(doc, u.getFile()); 
      return "order removed"; 
     } 

    } 
    return "order doesnt exist"; 
} 

をしたが、私は削除したいクライアントを挿入すると、このように私は一つだけを削除していたコードがされています。 たとえば、cli5を挿入すると、見つけた最初のcli5が削除されます。私はちょっとしたことがありますが、私は方法を知らないので、私はいくつかのクライアントを数えてxpathを作るのですか、それを簡単にする方法がありますか?

答えて

0

何かを削除するとすぐにメソッドが返されるためです。あなたはreturn "order removed";をforループから取り出して、何かが削除されているかどうかを確認するフラグ変数のようなものを持っています。

@WebMethod(operationName = "removeorder2") 
public String removeorder2(@WebParam(name = "cliente") String id) { 
    boolean check = false; 
    URL u = this.getClass().getResource("orders.xml"); 
    Document doc = XMLJDomFunctions.lerDocumentoXML(u.getFile()); 
    Element encomendas = doc.getRootElement(); 
    for (int i = 0; i < encomendas.getChildren().size(); i++) { 
     Element filho = encomendas.getChildren().get(i); 
     if (filho.getAttribute("cliente").getValue().equals(id)) { 
      encomendas.getChildren().remove(i); 
      XMLJDomFunctions.escreverDocumentoParaFicheiro(doc, u.getFile()); 
      check = true; 
     } 

    } 
    if (check) return "order removed"; 
    return "order doesnt exist"; 
} 

もう1つは削除ロジックです。たとえば、インデックス1のアイテムを削除すると、次のアイテムのインデックス1が削除されます。しかし、次のインタラクションでは、インデックス2に行き、3番目のアイテムは現在インデックス1にありますがスキップされますか?ですから、次のアイテムのインデックスを再確認して、何もスキップしていないことを確認する必要があります。

Btw、方法は何ですかescreverDocumentoParaFicheiro

+0

私はあなたの質問を理解するとは思わない...しかしそれは働いた!ご協力ありがとうございました。 – user6236820

+0

メソッド 'escreverDocumentoParaFicheiro'はファイルを変更することです。たとえば、ファイル内にcli5 cli5 cli7 cli5がある場合、cli5を削除すると、そのメソッドがファイルに変更を書き込むので、cli7のみが表示されます。 – user6236820

+0

また、次のループのインデックスを再確認する必要があります。 たとえば、a、b、b、cの4つのアイテムがあり、bアイテムをすべて削除したいとします。インデックス1の最初のbを探し、それを削除します。 何が起こるか:今度は2番目のbのインデックスはインデックス1です。しかし、すでにループを更新しているので、インデックス2をチェックしてそこにcを見つけるでしょう。したがって、第2のbをインデックス1に残し、削除されないようにする。 – berong91