如何在基于模板的解析器中处理冗余标记名称

时间:2017-03-14 04:44:06

标签: java json xml xml-parsing

我的数据交换解析器是一个基于模板的解析器,正如我解释here。 适用于单级XML / JSON,但在冗余标记的情况下则失败。

Ex:对于此请求

            <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>

使用模板解析上述请求后

            <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>

现在我正在根据节点名称替换节点值,这显然是一个失败。

我想过使用parentname + nodename但在这种情况下甚至失败了。如果请求足够复杂,其他名称也会失败。

这个问题的解决方案是什么?

P.S:我没有使用JAXB,因为我必须创建bean并在请求随时间变化时更改它们。

1 个答案:

答案 0 :(得分:1)

考虑使用XPATH而不是使用parentname + nodename。使用 XPATH 在模板中找到适当的XML节点,然后替换该值。