使用多个相同的标记解析XML

时间:2016-02-17 21:27:42

标签: java xml scala xstream

在添加任何其他内容之前,我想提一下我在这里查看了其他答案。不幸的是,答案并不适用于我的情况,而最好的答案只提供了一些代码而没有真正回答任何问题。

我有XML文件,内容如下:

<TransactionLine status="normal">
 <ItemLine>
  <ItemCode>
   <POSCodeFormat format="upcA"></POSCodeFormat>
   <POSCode>074804007527</POSCode>
   <POSCodeModifier name="pc">1</POSCodeModifier>
  </ItemCode>
  <Description>EP  PK WINS EACH</Description>
  <EntryMethod method="scan"></EntryMethod>
  <ActualSalesPrice>2.99</ActualSalesPrice>
  <MerchandiseCode>1</MerchandiseCode>
  <SellingUnits>1</SellingUnits>
  <RegularSellPrice>2.99</RegularSellPrice>
  <SalesQuantity>1</SalesQuantity>
  <SalesAmount>2.99</SalesAmount>
  <ItemTax>
   <TaxLevelID>101</TaxLevelID>
  </ItemTax>
  <SalesRestriction>
   <SalesRestrictFlag value="no"  type="other"></SalesRestrictFlag>
  </SalesRestriction>
 </ItemLine>
</TransactionLine>
<TransactionLine status="normal">
<ItemLine>
<ItemCode>
 <POSCodeFormat format="upcA"></POSCodeFormat>
 <POSCode>030004344770</POSCode>
 <POSCodeModifier name="pc">1</POSCodeModifier>
</ItemCode>
<Description>MCRFBER TOW EACH</Description>
<EntryMethod method="scan"></EntryMethod>
<ActualSalesPrice>1</ActualSalesPrice>
<MerchandiseCode>1</MerchandiseCode>
<SellingUnits>1</SellingUnits>
<RegularSellPrice>1</RegularSellPrice>
<SalesQuantity>1</SalesQuantity>
<SalesAmount>1</SalesAmount>
<ItemTax>
 <TaxLevelID>101</TaxLevelID>
</ItemTax>
<SalesRestriction>
 <SalesRestrictFlag value="no"  type="other"></SalesRestrictFlag>
</SalesRestriction>
</ItemLine>
</TransactionLine>

给定文件将具有多个“交易行”。它们之间的区别因素是POS码。我的主要问题是,我如何深入到可以实际使用该差异化值开始将信息投入必要对象的程度?简单地移除它们不是一种选择。我无法控制XML输出,因此我无法使其更有用。我正在使用XStrem作为XML解析器。 Java中的解决方案更可取,但Scala也没问题。

1 个答案:

答案 0 :(得分:0)

获取grant您的xml包含一个根节点,您可以使用xpath表达式来标识相关节点,如:

B

使用XStream应该像

//TransactionLine/ItemLine/ItemCode[POSCode=074804007527]/../..