如何在java w/o DOM中读取XML?

如何在java w/o DOM中读取XML?,java,xml,xpath,Java,Xml,Xpath,我有一个XML文件,使用Xpath读取信息,我想同时读取“清单Id”和“预算剩余” XML示例 <ads> <ad> <listing_ids> <listing_id>2235</listing_id> <listing_id>303</listing_id> <listing_id>394</listing_id> </

我有一个XML文件,使用Xpath读取信息,我想同时读取“清单Id”和“预算剩余”

XML示例

<ads>
  <ad>
     <listing_ids>
      <listing_id>2235</listing_id>
      <listing_id>303</listing_id>
      <listing_id>394</listing_id>
     </listing_ids>
     <reference_id>11</reference_id>
     <net_ppe>0.55</net_ppe>
     <budget_remaining>50000.0</budget_remaining>
 </ad>
  <ad>
     <listing_ids>
       <listing_id>2896</listing_id>
     </listing_ids>
     <reference_id>8</reference_id>
     <net_ppe>1.5</net_ppe>
     <budget_remaining>1.3933399</budget_remaining>
  </ad>
 </ads>
使用代码

String expression = "/ads/ad/listing_ids/listing_id";
    System.out.println(expression);
    NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(docum, XPathConstants.NODESET);
    for (int i = 0; i < nodeList.getLength(); i++) {
        System.out.println(nodeList.item(i).getFirstChild().getNodeValue());
    }

String expression1 = "/ads/ad/budget_remaining";
    System.out.println(expression1);
    NodeList nodeList1 = (NodeList) xPath.compile(expression1).evaluate(docum, XPathConstants.NODESET);
    for (int i = 0; i < nodeList1.getLength(); i++) {
        System.out.println(nodeList1.item(i).getFirstChild().getNodeValue());
    }
期望输出

 2235,50000.0
 303,50000.0
 2896,50000.0
 2896,1.3933399
如何使用Xpath或任何其他方法读取XML?我希望针对每个“列表Id”一起读取“列表Id”和“剩余预算”,如

303,50000

请帮助我了解Java。

使用jaxb将XML解析为广告列表可能更容易。
然后可以引用Java列表,我建议使用XQuery,它与XPath不同,可以返回结构化结果。(或者XPath2.0,但是如果您要使用XPath2.0,那么最好直接使用XQuery)

相关查询是

string-join(
  for $n in /ads/ad/listing_ids/listing_id
  return $n/concat(., ',', ../../budget_remaining),
  '&#xa;'
)

这将以单个字符串的形式返回所需的输出。

请检查:@MarkW:这对我没有帮助。我已经根据实际需求修改了这个问题,希望它能有所帮助。
表达式
是否包含您发送的实际表达式?您可以使用
//listing\u id/listing\u id[2]
获取
listing\u id
。您是否希望获得与ID关联的
net\u ppe
?您可以构建一个包含所选ID的表达式,如下所示
“//ad[listing\u ids/listing\u ID=“+ID+”]/net\u ppe”
,您将获得第二个值。我想通过这篇文章和上面的教程,你也许能够解决你的问题。@helderdarocha:它成功了,谢谢。
303,50000
string-join(
  for $n in /ads/ad/listing_ids/listing_id
  return $n/concat(., ',', ../../budget_remaining),
  '&#xa;'
)