使用Java DOM重新组织XML-Hierarchy_Request_Error

时间:2018-09-21 12:14:55

标签: java xml dom

我有一个具有以下方案结构的xml

<asp:GridView ID="gvMyObjects" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None" CssClass="GridView" AutoPostBack="False"  AutoGenerateColumns="False" >
        <AlternatingRowStyle BackColor="White" />
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>

                            <button class="myBtn" id="Button1" type="button" data-toggle="modal" data-target="#myModal"  runat="server" ><span>Select</span></button>

                </ItemTemplate>
            </asp:TemplateField>

            <asp:TemplateField HeaderText="ID" >
                <ItemTemplate>
                    <asp:Label ID="ObjectID" runat="server"   margin-Left="100px"  ></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>

            <asp:TemplateField HeaderText="Name">
                <ItemTemplate>
                    <asp:Label ID="ObjectName" runat="server" margin-Left="100px" '></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>

            <asp:TemplateField HeaderText="Value2">
                <ItemTemplate>
                    <asp:TextBox ID="ObjectValue" runat="server" margin-Left="100px" MaxLength='<%# Bind("Something") %>' ></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>

            <asp:TemplateField HeaderText="Value">
                <ItemTemplate>
                    <asp:Label ID="ObjectLenghtValue" runat="server" margin-Left="100px" ></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>    
    </asp:GridView>

我需要将其重组为

<test>
    <testcase classname="TestsQuarantine.CreateUsers" name="Administrator"/>
    <testcase classname="TestsQuarantine.Login" name="documentMailQuarantine"/>
    <testcase classname="TestsClerk.CreateUsers" name="John"/>
</test>

这时,我正在读取文件到NodeList,对其进行遍历,创建新的根目录,并尝试使用原始文件进行切换,以实现所需的结构,但出现以下错误

  

HIERARCHY_REQUEST_ERR:尝试在其上插入节点   不允许。

发生在执行根切换的过程中,我不知道为什么会这样。这是我的代码:

<test>
    <testsuite name="Quarantine">
        <testcase classname="TestsQuarantine.CreateUsers" name="Administrator"/>
        <testcase classname="TestsQuarantine.Login" name="documentMailQuarantine"/>
    </testsuite>
    <testsuite name="Clerk">
        <testcase classname="TestsClerk.CreateUsers" name="John"/>
    </testsuite>
</test>

要使其正常运行,我需要更改什么?

1 个答案:

答案 0 :(得分:0)

您在测试用例节点上的迭代不正确。我将该片段更改为以下片段,您的代码正在运行:

Node testNode = doc.getDocumentElement();
NodeList testCases= testNode.getChildNodes();

for(int i=0; i < testCases.getLength(); i++) {
    Node n = testCases.item(i);

    if (!(n instanceof Text)) {
        Element testCase = (Element) n;

        if (testCase.getAttribute("classname").contains("Clerk")) {
            clerk.add(testCase);
        } else if (testCase.getAttribute("classname").contains("Quarantine")) {
            quara.add(testCase);
        } else {
            misc.add(testCase);
        }
    }
}