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);