java - 使用Java删除XML中的空标签

标签 java xml

我为Servlet提供了一些功能,我想做的一件事情是,当接收InputStream(基本上是解析为XML格式的PDF文档)时,将该数据设置为String对象,然后尝试删除所有空标签,但到目前为止我还没有得到任何好的结果:

这是servlet接收的数据



    <form1>
        <GenInfo>
            <Section1>
                <EmployeeDet>
                    <Title>999990000</Title>
                    <Firstname>MIKE</Firstname>
                    <Surname>SPENCER</Surname>
                    <CoName/>
                    <EmpAdd>
                        <Address><Add1/><Add2/><Town/><County/><Pcode/></Address>
                    </EmpAdd>
                    <PosHeld>DEVELOPER</PosHeld>
                    <Email/>
                    <ConNo/>
                    <Nationality/>
                    <PPSNo/>
                    <EmpNo/>
                </EmployeeDet>
            </Section1>
        </GenInfo>
    </form1>


最终结果应如下所示:



    <form1>
        <GenInfo>
            <Section1>
                <EmployeeDet>
                    <Title>999990000</Title>
                    <Firstname>MIKE</Firstname>
                    <Surname>SPENCER</Surname>
                    <PosHeld>DEVELOPER</PosHeld>
                </EmployeeDet>
            </Section1>
        </GenInfo>
    </form1>


我很抱歉,如果这是一个重复的问题,但是我对类似的帖子进行了一些研究,但没有一个可以为我提供正确的方法,这就是为什么我在另一篇帖子中问您。

先感谢您。

最佳答案

这是regex做您想要的事情的方法。我敢肯定我可能没有想到某些“边缘”情况,但有时您无法确定何时使用regex。另外,DOM解析器可能是执行此操作的最佳方法。

public static void main(String[] args) throws Exception {
    String[] patterns = new String[] {
        // This will remove empty elements that look like <ElementName/>
        "\\s*<\\w+/>", 
        // This will remove empty elements that look like <ElementName></ElementName>
        "\\s*<\\w+></\\w+>", 
        // This will remove empty elements that look like 
        // <ElementName>
        // </ElementName>
        "\\s*<\\w+>\n*\\s*</\\w+>"
    };

    String xml = "    <form1>\n" +
                    "        <GenInfo>\n" +
                    "            <Section1>\n" +
                    "                <EmployeeDet>\n" +
                    "                    <Title>999990000</Title>\n" +
                    "                    <Firstname>MIKE</Firstname>\n" +
                    "                    <Surname>SPENCER</Surname>\n" +
                    "                    <CoName/>\n" +
                    "                    <EmpAdd>\n" +
                    "                        <Address><Add1/><Add2/><Town/><County/><Pcode/></Address>\n" +
                    "                    </EmpAdd>\n" +
                    "                    <PosHeld>DEVELOPER</PosHeld>\n" +
                    "                    <Email/>\n" +
                    "                    <ConNo/>\n" +
                    "                    <Nationality/>\n" +
                    "                    <PPSNo/>\n" +
                    "                    <EmpNo/>\n" +
                    "                </EmployeeDet>\n" +
                    "            </Section1>\n" +
                    "        </GenInfo>\n" +
                    "    </form1>";

    for (String pattern : patterns) {
        Matcher matcher = Pattern.compile(pattern).matcher(xml);
        xml = matcher.replaceAll("");
    }

    System.out.println(xml);
}


结果:

    <form1>
        <GenInfo>
            <Section1>
                <EmployeeDet>
                    <Title>999990000</Title>
                    <Firstname>MIKE</Firstname>
                    <Surname>SPENCER</Surname>
                    <PosHeld>DEVELOPER</PosHeld>
                </EmployeeDet>
            </Section1>
        </GenInfo>
    </form1>

关于java - 使用Java删除XML中的空标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30577448/

相关文章:

java - 列表列表列表

java - Get方法返回null

java - 如何更改我的 log4j2.xml RollingFile 设置

java - 在线性布局中将 TextView 置于 ImageView 正下方

java - 如何格式化打印输出,以便在 Java 中每行 6 个字符串左对齐?

仅 JavaFX TextField 焦点状态可通过 css 更改

xml - 如何在 PowerShell 中编写 Xml.linq?

Android Studio 未将 xml 文件识别为布局文件

java - 了解 Java Soap 堆栈 - jaxb、jax-*、cfx 等

xml - log4j 可以从基本/根元素继承 xml 吗?