Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过使用jsoup获取xml数据_Java_Jsoup - Fatal编程技术网

Java 通过使用jsoup获取xml数据

Java 通过使用jsoup获取xml数据,java,jsoup,Java,Jsoup,我正在尝试使用jsoup解析xml数据。我将每个数据放入数组列表。它已经在工作了,但是,当我得到数据时,每个数据都进入同一行。 例如,我从中获得的数据是 RESULT ITEM R1 B DESC ="" B1 C DESC ="" CR1 C1 CR2 C1 CR3 C1 我的java代码是 List<Object&g

我正在尝试使用
jsoup
解析xml数据。我将每个数据放入
数组列表
。它已经在工作了,但是,当我得到
数据
时,每个
数据
都进入同一行。 例如,我从中获得的数据是

RESULT
    ITEM
    R1
      B DESC =""
        B1
      C DESC =""
        CR1
           C1
        CR2
           C1
        CR3
           C1
我的java代码是

List<Object> list = new ArrayList<>();            
Elements elements = document.select("ITEM");
for (Element element : elements) {
   medicationBasic = new MedicationBasic();
   medicationBasic.setProductName(element.select("B1").text());
   medicationOrigin = new MedicationOrigin();
   medicationOrigin.setMedOrigin(element.select("C1").text());
   list.add(medicationBasic);
   list.add(medicationOrigin);
   response = new ResponseList(Result.SUCCESS, (ArrayList) list);
预期:

{
productName:"B1",
medOrigin:"C1(from CR1)"
}

{
productName:"B1",
medOrigin:"C1(from CR2)"
}

{
productName:"B1",
medOrigin:"C1(from CR3)"
}
我的代码有什么问题??请在这方面帮助我…

元素。选择(“C1”)
选择项目中的所有C1元素(返回
元素
),并
文本()
返回:

public String text()获取所有匹配字符串的组合文本 元素

修复 迭代C1元素并添加键值对

示例代码

String xmlString = "<RESULT>\r\n" + 
        "    <ITEM>\r\n" + 
        "       <R1>\r\n" + 
        "           <B DESC =\"\">\r\n" + 
        "               <B1>B1<B1>\r\n" + 
        "           </B>\r\n" + 
        "           <C DESC =\"\">\r\n" + 
        "               <CR1>\r\n" + 
        "                   <C1>C1(from CR1)</C1>\r\n" + 
        "               </CR1>\r\n" + 
        "               <CR2>\r\n" + 
        "                   <C1>C1(from CR2)</C1>\r\n" + 
        "               </CR2>\r\n" + 
        "               <CR3>\r\n" + 
        "                   <C1>C1(from CR3)</C1>\r\n" + 
        "               </CR3>\r\n" + 
        "           </C>\r\n" + 
        "       </R1>\r\n" + 
        "   </ITEM>\r\n" + 
        "</RESULT>";

Document document = Jsoup.parse(xmlString);

List<SimpleEntry<String, String>> list = new ArrayList<>();

Elements elements = document.select("ITEM");
for (Element element : elements) {
    String medicationBasic = element.select("B1").text();
    element.select("C1").forEach(c1Element -> {
        String medicationOrigin = c1Element.text();
        list.add(new SimpleEntry<String, String>(medicationBasic, medicationOrigin));

    });
}

System.out.println(list);

为了将来参考,我通过以下方法解决了我的问题:

List<Object> list = new ArrayList<>();            
Elements bElement = document.select("B DESC");
Elements cElement = document.select("C DESC>*");
for (Element bElement : elements) {
   medicationBasic = new MedicationBasic();
   medicationBasic.setProductName(element.select("B1").text());
   list.add(medicationBasic);
}
for (Element cElement : elements) {
   medicationOrigin = new MedicationOrigin();
   medicationOrigin.setMedOrigin(element.select("C1").text());
   list.add(medicationOrigin);
}
response = new ResponseList(Result.SUCCESS, (ArrayList) list);
List List=new ArrayList();
元素bElement=document.select(“B DESC”);
Elements cElement=文档。选择(“C描述>*”;
用于(元素带:元素){
MedicalationBasic=新MedicalationBasic();
medicationBasic.setProductName(element.select(“B1”).text());
列表。添加(MedicalationBasic);
}
对于(元素cElement:元素){
medicationOrigin=新medicationOrigin();
medicationOrigin.setMedOrigin(element.select(“C1”).text());
列表。添加(药物来源);
}
响应=新的响应列表(Result.SUCCESS,(ArrayList)列表);

我得到了我期望的结果

更具体一些:发布实际的xml数据和实际(意外)的输出。xml名称是我试图从中获得的实际内容。这个问题解决了吗?
我只发布了我正在做的事情的基本逻辑和概念。这很清楚。不管是谁投了反对票,这说明你不知道该怎么办。
不,这不是反对票所表示的()。只要使用字符串而不是缺少的类,并发布类似于我在回答中使用的XML,您就可以产生一个更一般化的问题,它仍然会重现您的问题,但没有编译时错误。再看一眼谢谢你的回复…对不起,我没听懂你的意思。我获取xml的地方是一个网站…而不是一个文本…所以,我不能真正将xml放入字符串中,对吗?StringBuilder queryUrl=new StringBuilder();queryUrl.append(“);queryUrl.append(MedicalationCode);这就是我之前要求提供实际xml的原因。只需像以前一样使用您的文档,相关部分是C1元素的处理,如我的回答中所述。另一方面,请注意:您没有提供用于重现问题的信息(必须编写自己的xml;没有药物代码url仍然不完整;缺少类定义,因此发布的代码甚至无法编译)这可能是问题被否决的原因。您可能希望修复这些问题并更新您的问题。我真的相信这不是您要求完整解决方案代码的地方。我只发布了基本的逻辑和概念,说明我正在做的事情。这很清楚。无论谁否决了这些,都表明您不知道该做什么。
[B1 =C1(from CR1), B1 =C1(from CR2), B1 =C1(from CR3)]
List<Object> list = new ArrayList<>();            
Elements bElement = document.select("B DESC");
Elements cElement = document.select("C DESC>*");
for (Element bElement : elements) {
   medicationBasic = new MedicationBasic();
   medicationBasic.setProductName(element.select("B1").text());
   list.add(medicationBasic);
}
for (Element cElement : elements) {
   medicationOrigin = new MedicationOrigin();
   medicationOrigin.setMedOrigin(element.select("C1").text());
   list.add(medicationOrigin);
}
response = new ResponseList(Result.SUCCESS, (ArrayList) list);