2016-02-17 5 views
0

Прежде чем добавлять что-либо еще, я хотел бы упомянуть, что здесь я рассмотрел другие ответы. К сожалению, ответы не были применимы к моей ситуации, и лучший из них просто предоставил небольшое количество кода, фактически не отвечая ни на что.Анализ XML с несколькими идентичными тегами

У меня есть 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> 

Данный файл будет иметь несколько «Линии Transaction». Дифференцирующим фактором между ними будет POS-код. Моя основная проблема заключается в том, как я могу перейти к той точке, где я действительно могу использовать это дифференцирующее значение, чтобы начать бросать информацию в нужные объекты? Просто удалить их, поскольку я иду, не вариант. Я не могу контролировать вывод XML, поэтому я не могу сделать его более удобным. Я использую XStrem в качестве анализатора XML. Решения, которые есть на Java, предпочтительнее, но Scala также в порядке.

ответ

0

Беря грант вашего XML содержит корневой узел, вы можете использовать выражение XPath для идентификации уместную узла, что-то вроде:

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

с использованием XStream должна быть что-то вроде

String idimlookingfor = "074804007527"; 

XPathFactory factory = XPathFactory.newInstance(); 
XPath xpath = factory.newXPath(); 

String xpathexpression = String.format("//TransactionLine/ItemLine/ItemCode[POSCode=%s]/../..", idimlookingfor); 
XPathExpression expr = xpath.compile(xpathexpression); 

Object result = expr.evaluate(document, XPathConstants.NODESET); 
NodeList nodes = (NodeList) result; 

 Смежные вопросы

  • Нет связанных вопросов^_^