2012-03-08 10 views
0

私のGWTウェブアプリケーションでは、SOAPサーバーからXMLデータを取得します。私が解析し、このXML構造を持つまで私は、クライアントで、このXMLデータを解析する任意の困難に遭遇していない:GWTでXMLパーサーをXMLParserで解析する

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <data> 
    <list row="0"> 
     <product_name>A</product_name> 
     <desc>product A</desc> 
     <promo> 
     &lt;?xml version="1.0" encoding="UTF-8"?&gt; 
     &lt;root&gt; 
      &lt;data/&gt; 
     &lt;/root&gt; 
     </promo> 
    </list> 
    <list row="1"> 
     <product_name>B</product_name> 
     <desc>product B</desc> 
     <promo> 
     &lt;?xml version="1.0" encoding="UTF-8"?&gt; 
     &lt;root&gt; 
      &lt;data&gt; 
       &lt;list row="0"&gt; 
       &lt;pname&gt;Test&lt;/pname&gt; 
       &lt;pdesc&gt;Test promo only&lt;/pdesc&gt; 
       &lt;/list&gt; 
      &lt;/data&gt; 
     &lt;/root&gt; 
     </promo> 
    </list>  
    </data> 
    <return_code>0</return_code> 
</root> 

は、このXMLを持つ、私はNodeListElementで、すべてのリストのPRODUCT_NAMEとDESCを取得しています。しかし、私はまた、各製品のプロモーションを取得する必要があります。

iをプロモーションを取得しようとしている:私は、各プロモーションの値だかどうか確認するとき、私は同じ出力持ち

Document d = XMLParser.parse(xml); // xml - xml data retrieved from server 
Element element = d.getDocumentElement(); 
NodeList nlist = element.getElementsByTagName("list"); 
final int count = nlist.getLength(); 

for(int i = 0; i < count; ++i) { 
    final Element list = (Element) nlist.item(i); 
    String product_name = ((Text)list.getElementsByTagName("fproductid") 
     .item(0).getFirstChild()).getData() 
    ... 

    // get promo 
    String promo = d.getElementsByTagName("promo").item(0). 
     getFirstChild().getNodeValue(); 
    Document dpromo = XMLParser.parse(promo); 
    ... 
} 

:フィールドを取得する方法を

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <data/> 
</root> 

任意のアイデアを/ (pname、pdesc)?

答えて

1

String promo = d.getElementsByTagName("promo").item(0).getFirstChild().getNodeValue();

あなたは、ループの各反復で同じpromo要素を見ています。

String promo = list.getElementsByTagName("promo").item(0).getFirstChild().getNodeValue();

を、あなたは、各promo要素の完全なテキストを取得します:

listdを交換してください。