Извлечение значения элемента из jPOS ISO
Я пытаюсь извлечь значение из строки ISO, полученное из структурированных данных jPOS. Строка выглядит так:
221ThirdPartyBillPayment3125
<ThirdPartyBillPayment>
<BillPaymentRequest>
<ReferenceId>1111111111</ReferenceId>
</BillPaymentRequest>
</ThirdPartyBillPayment>
Есть ли способ получить значение "1111111111" узла ReferenceId?
2 ответа
Образцы данных представляют собой поле данных с постилионным структурированием, которое использует вид TLV (формат значения длины тега).
221ThirdPartyBillPayment3125
<ThirdPartyBillPayment>
<BillPaymentRequest>
<ReferenceId>1111111111</ReferenceId>
</BillPaymentRequest>
221ThirdPartyBillPayment
Здесь 2 - длина длины (21), 21 - длина тега ThirdPartyBillPayment
3125
<ThirdPartyBillPayment>
<BillPaymentRequest>
<ReferenceId>1111111111</ReferenceId>
</BillPaymentRequest>
</ThirdPartyBillPayment>
Здесь 3 - длина длины (125), 125 - длина данных для подражания.
Вы можете написать код, чтобы итеративно получать доступ к xml для всего, что доступно в структурированных данных, а затем анализировать данные xml внутри. Или вы можете запросить у Postilion dtd/schema для xml, используемого в их iso-поле структурированных данных, и использовать jaxb для доступа к данным.
Это будет сводиться к паре имя-значение
ThirdPartyBillPayment= <ThirdPartyBillPayment><BillPaymentRequest<ReferenceId>1111111111</ReferenceId></BillPaymentRequest>
</ThirdPartyBillPayment>
У вас есть некоторые пользовательские данные в виде нескольких фиксированных полей и некоторого XML-кода, поэтому вам сначала нужно получить все поле из ISOMsg, то есть:
String s = m.getString("127.1"); // provided your data comes in field 127.1
Затем выясните, где начинается XML (в этом случае, в indexOf('<')
), тогда вам нужно передать этот XML в синтаксический анализатор XML (вы можете использовать jdom
который приходит как зависимость jPOS), проанализируйте XML и получите дочерний элемент ReferenceId
,