2012-03-08 2 views
0

в моем GWT веб-приложении, я должен получить данные XML с сервера SOAP. я еще не сталкивался с какими-либо трудностей разбора это XML-данных в клиенте, пока я не иметь эту структуру XML для синтаксического анализа:Анализ XML в GWT с 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, я извлек PRODUCT_NAME и DESC каждого список с NodeList и Element. но я также должен получить промо каждого продукта.

я попробовал получать промо по:

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 элемент в каждой итерации цикла.

Заменить d с list:

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

и вы получите полный текст для каждого promo элемента.

Смежные вопросы