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

时间:2014-02-19 22:06:34

标签: java xml xpath

我有一个XML文件并使用Xpath读取信息,我想一起阅读'listings_Id'和'budget_remaining'。

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>

我想将其输出为CSV文件,如下所示

ListingId,BudgetRemaining
2235,50000
303,50000
394,50000
2896,1.39

使用代码

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

输出

  /ads/ad/listing_ids/listing_id
  2235
  303
  394
  2896
  /ads/ad/budget_remaining
  50000.0
  1.3933399

期望输出

 2235,50000.0
 303,50000.0
 2896,50000.0
 2896,1.3933399

如何使用Xpath或任何其他方法读取XML?我希望将'listing_ids'和'budget_ remaining'一起读取为每个'Listing Id',如

303,50000

请帮助我 - Java的新手。

2 个答案:

答案 0 :(得分:1)

您可能更容易使用jaxb将XML解析为广告列表。 然后,您可以引用Java列表

答案 1 :(得分:1)

我建议使用XQuery,与XPath不同,它可以返回结构化结果。 (或者XPath 2.0,但如果您要使用XPath 2.0,那么您也可以一直使用XQuery)。

相关查询

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

这会将所需的输出作为单个字符串返回。