使用XMLParser在GWT中解析XML

时间:2012-03-08 05:21:18

标签: xml gwt xml-parsing

在我的GWT网络应用程序中,我将从SOAP服务器检索XML数据。我没有遇到任何困难解析客户端中的这个xml数据,直到我有这个xml结构来解析:

<?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。但我也必须检索每种产品的促销。

我试过通过以下方式获得促销:

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>

任何想法如何获取促销节点内的fields /元素(即pname,pdesc)?

1 个答案:

答案 0 :(得分:1)

  

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

您正在循环的每次迭代中查看相同的promo元素。

d替换为list

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

您将获得每个promo元素的全文。