Vamsidhar
Vamsidhar

Reputation: 832

How to handle redundant tag-names in template based parser

My parser for Data exchange is a template-based parser as I explained here. Works perfectly for single level XML/JSON but fails in the case of redundant tags.

Ex: For this request

            <Result>
                <Result_Flag>1</Result_Flag>
                <Result_Code>2</Result_Code>
                <Result_Message>3</Result_Message>
                <Result_Description>4</Result_Description>
            </Result>
            <RR>
                <OR>
                    <I_Number>5</I_Number>
                    <OrderNumber>6</OrderNumber>
                    <Agents>
                        <Agent>
                            <name>7</name>
                            <id>8</id>
                            <I_Number>9</I_Number>
                        </Agent>
                        <Agent>
                            <name>10</name>
                            <id>11</id>
                            <I_Number>12</I_Number>
                        </Agent>
                    </Agents>
                </OR>
                <OR>
                    <I_Number>13</I_Number>
                    <OrderNumber>14</OrderNumber>
                    <Agents>
                        <Agent>
                            <name>15</name>
                            <id>16</id>
                            <I_Number>17</I_Number>
                        </Agent>
                        <Agent>
                            <name>18</name>
                            <id>19</id>
                            <I_Number>20</I_Number>
                        </Agent>
                    </Agents>
                </OR>
            </RR>

After parsing the above request using a template

            <Result>
                <Result_Flag>1</Result_Flag>
                <Result_Code>2</Result_Code>
                <Result_Message>3</Result_Message>
                <Result_Description>4</Result_Description>
            </Result>
            <RR>
                <OR>
                    <I_Number>20</I_Number>
                    <OrderNumber>14</OrderNumber>
                    <Agents>
                        <Agent>
                            <name>18</name>
                            <id>19</id>
                            <I_Number>20</I_Number>
                        </Agent>
                        <Agent>
                            <name>18</name>
                            <id>19</id>
                            <I_Number>20</I_Number>
                        </Agent>
                    </Agents>
                </OR>
                <OR>
                    <I_Number>20</I_Number>
                    <OrderNumber>14</OrderNumber>
                    <Agents>
                        <Agent>
                            <name>18</name>
                            <id>19</id>
                            <I_Number>20</I_Number>
                        </Agent>
                        <Agent>
                            <name>18</name>
                            <id>19</id>
                            <I_Number>20</I_Number>
                        </Agent>
                    </Agents>
                </OR>
            </RR>

Right now I am replacing the node value based on node name, which is clearly a failure.

I thought of using parentname+nodename but even that fails in this case. And the other names also fail if the request is complex enough.

What is the solution for this problem?

P.S: I am not using JAXB because I have to create beans and change them when the request changes by time.

Upvotes: 4

Views: 44

Answers (1)

sivaram
sivaram

Reputation: 26

Instead of using parentname+nodename consider using XPATH . Find appropriate XML node in template using XPATH and replace the value.

Upvotes: 1

Related Questions