Если только парсить, то довольно удобно использовать XSLT-трансформацию:
Сама трансформация:
Code:
<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sap="http://www.sap.com/sapxsl"
>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<STRUCT1>
<FIELD1>
<xsl:value-of select="Node1/.../NodeN"/>
</FIELD1>
<FIELD2>
<xsl:value-of select="Node1/.../NodeN"/>
</FIELD2>
<FIELD3>
<xsl:value-of select="Node1/.../NodeN"/>
</FIELD3>
</STRUCT1>
<STRUCT2>
<FIELD1>
<xsl:value-of select="Node1/.../NodeN"/>
</FIELD1>
<FIELD2>
<xsl:value-of select="Node1/.../NodeN"/>
</FIELD2>
<FIELD3>
<xsl:value-of select="Node1/.../NodeN"/>
</FIELD3>
</STRUCT2>
</asx:values>
</asx:abap>
</xsl:template>
</xsl:transform>
Вызов этого дела:
Code:
call transformation XXX
source xml bindata
result struct1 = ls_struct1
struct2 = ls_struct2.
Можно и в обратную сторону из структур генерировать xml нужного формата.