jsoup xml解析 - 未显示子节点

时间:2017-10-25 13:23:42

标签: java xml jsoup

我正在解析xml字符串。我只能打印一个孩子。

我的代码:

import java.util.List;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class RunReport {

    public static void main(String[] args){
        String xmlcontent="<Results><ResultSet fetchSize=\"2\">"
                + "<Row rowNumber=\"1\"><TBC_ID>29379155</TBC_ID><TBC_DATE>2013-01-31</TBC_DATE></Row>"
                + "<Row rowNumber=\"2\"><TBC_ID>29379576</TBC_ID><TBC_DATE>2013-01-31</TBC_DATE></Row>";
        Document doc = Jsoup.parse(xmlcontent);
        Elements rows =doc.getElementsByTag("Row");
        List<Element> resultSet= doc.getElementsByTag("Row");
        for(int i=0; i<resultSet.size();i++){
            Element RsRecord = resultSet.get(i);
            Elements columns = RsRecord.children();
            for(Element column:columns){
                System.out.println("Row id:"+i+",Column Node name:"+column.nodeName()+",Value="+column.ownText());
            }

        }

    }

输出:

Row id:0,Column Node name:tbc_id,Value=29379155
Row id:1,Column Node name:tbc_id,Value=29379576

标记 - “行”有两个子节点,但我的输出只显示一个子节点。

预期:

Row id:0,Column Node name:tbc_id,Value=29379155
Row id:0,Column Node name:tbc_date,Value=2013-01-31
Row id:1,Column Node name:tbc_id,Value=29379576
Row id:1,Column Node name:tbc_date,Value=2013-01-31

1 个答案:

答案 0 :(得分:2)

这对我有用:

package test;

import java.util.List;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class RunReport {

public static void main(String[] args){
    String xmlcontent="<Results>"
            + "<ResultSet fetchSize=\"2\">"
            + "<data rowNumber=\"1\">"
            + "<a>29379155</a>"
            + "<b>2013-01-31</b>"
            + "</data>"
            + "<data rowNumber=\"2\">"
            + "<a>29379576</a>"
            + "<b>2013-01-31</b>"
            + "</data>"
            + "</Results>"
            + "</ResultSet>";
    Document doc = Jsoup.parse(xmlcontent);
    List<Element> resultSet = doc.getElementsByTag("data");
    for(int i=0; i<resultSet.size();i++){
        Element RsRecord = resultSet.get(i);
        Elements columns = RsRecord.children();
        for(Element column:columns){
            System.out.println("Row id:"+i+",Column Node name:"+column.nodeName()+",Value="+column.ownText());
        }

    }

}
}

我的猜测是你在xml中使用了保留的工作。当我使用你的代码时,这是为我打印的结构:

<row rownumber="1">
 <tbc_id>
  29379155
  <tbc_date>
   2013-01-31
   <row rownumber="2">
    <tbc_id>
     29379576
     <tbc_date>
      2013-01-31
     </tbc_date>
    </tbc_id>
   </row>
  </tbc_date>
 </tbc_id>
</row>
<row rownumber="2">
 <tbc_id>
  29379576
  <tbc_date>
   2013-01-31
  </tbc_date>
 </tbc_id>
</row>