使用 Java 删除 XML 中的空标签

2024-02-03

我正在为 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>

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

先感谢您。


Here's 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);
}

Results:

    <form1>
        <GenInfo>
            <Section1>
                <EmployeeDet>
                    <Title>999990000</Title>
                    <Firstname>MIKE</Firstname>
                    <Surname>SPENCER</Surname>
                    <PosHeld>DEVELOPER</PosHeld>
                </EmployeeDet>
            </Section1>
        </GenInfo>
    </form1>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Java 删除 XML 中的空标签 的相关文章

随机推荐

  • 提取服务器证书

    我需要帮助获取适当的代码片段来获取服务器证书 有效和无效 由 CA 签名和自签名 任何链接和参考都将受到高度赞赏 我有一个 UNIX 命令 它可以提供我想要的结果 但我想要使用 Java 得到相同的输出 UNIX 中的命令是这样的 echo
  • ItemTemplate 和 ItemContainerStyle 不能一起使用吗?

    我正在尝试将 ItemTemplate 和 ItemContainerStyle 应用于 ItemsControl
  • 更改 UIActionSheet 中项目的文本颜色 - iOS 8

    我一直在使用以下代码来更改我添加的项目的文本颜色UIActionSheet void willPresentActionSheet UIActionSheet actionSheet for UIView subview in action
  • 如何可移植地扩展使用 mmap() 访问的文件

    我们正在尝试改变 SQLite 一个嵌入式数据库系统 使用 mmap 而不是通常的 read 和 write 调用来访问 磁盘上的数据库文件 对整个数据使用单个大映射 文件 假设文件足够小 我们没有问题 在虚拟内存中为此寻找空间 到目前为止
  • Keras - 从一个神经网络做出两个预测

    我正在尝试组合由同一网络产生的两个输出 该网络对 4 类任务和 10 类任务进行预测 然后我希望将这些输出组合起来 得到一个长度为 14 的数组 我将其用作最终目标 虽然这似乎很有效 但预测总是针对一个类别 因此它会产生一个概率分布 该概率
  • 如何使用 NSVisualEffectView 制作平滑、圆润、类似体积的 OS X 窗口?

    I m currently trying to make a window that looks like the Volume OS X window 为了做到这一点 我有自己的NSWindow 使用自定义子类 它是透明的 无标题栏 无阴
  • 插入到java.util.List中的任意位置

    根据文档 您可以将对象插入列表中的任何位置 该界面的用户可以精确控制每个元素在列表中的插入位置 来源 http download oracle com javase 6 docs api java util List html http d
  • 使用shared_ptr的派生类对象的向量

    我有这些课程 class Element class Button public Element class Label public Element class Input public Element 我希望能够创建一个void add
  • Chart.js:组合线形和条形数据

    我想创建一个图表Chart js http www chartjs org 包含两个不同的数据集 一个线数据集和一个条形数据集 您可以在这里查看我的完整代码 function initCombinedChart canvas each fu
  • ruby 访问静态变量

    class A ololo 1 end A ololo A new ololo NoMethodError undefined method ololo 好的 我需要一个 attr reader class B ololo 1 attr r
  • Tensorflow 安装和导入正确,但在尝试使用时抛出异常

    我在使用张量流时遇到问题 看来安装和导入正确 然而 当我调用它时 解释器会抛出一长串异常 其节略如下 我使用的是 OS X El Capitan v 10 11 6 Macbook Pro 15 英寸 2009 年中 2 8 GHz 英特尔
  • 将 Unix 移植到 Windows - pwd.h 的使用

    我正在尝试编译库尼汉 http sourceforge net projects libunihan 使用 MinGW 编写代码 但遇到了需要移植的功能 该函数的目的是获得规范的路径表示 它用pwd h 这是 POSIX 而 MinGW 不
  • 有没有办法让 Pandas ewm 在固定窗口上运行?

    我正在尝试使用熊猫 ewm 函数 https pandas pydata org pandas docs stable reference api pandas DataFrame ewm html计算指数加权移动平均线 然而我注意到信息似
  • 强制拆包的目的

    在 swift 文档中 您可以找到以下内容 if convertedNumber nil println convertedNumber has an integer value of convertedNumber prints conv
  • 如何从Web Worker调用共享Worker?

    是否可以从 Web Worker 调用 Shared Worker 你能给我举个例子吗 就我而言 我有一些网络工作者 我需要在他们之间共享一个单例服务 您可以使用类似于以下内容的技术https stackoverflow com a 307
  • TCPIP 3次握手

    为什么在 TCP 3 次握手的第 3 部分期间没有传输数据 例如 A 到 B SYN B 到 A ACK SYN A 到 B ACK 为什么数据不能与这个 ACK 一起传输 我一直认为这是为了将会话建立阶段与数据传输阶段分开 以便no传输真
  • 将排序后的 hashmap 的键值存储在 string[] 中

    我很抱歉发布这个不清楚的问题 这是我第一次使用 hashmap 因此我很困惑 试图在这里以更好的方式解释这个问题 将 hashmap 的键值存储在 string 中 https stackoverflow com questions 741
  • 如何在 JQuery 1.5.x 中延迟自动打开模态对话框窗口?

    单击以下对话框后效果很好 a href a 位于 html 底部的 javascript 触发该操作 jQuery dialogX dialog bgiframe true autoOpen false modal true 现在 我希望在
  • Azure Web App 和 Azure SQL Server 的 VNet 集成

    我有一个 Azure Web App 和一个 Azure SQL Server 它们都位于同一订阅中 它们都连接到同一 VNet 子网 如下面的快照所示 SQL Server 配置为不允许 Azure 资源和服务访问服务器 因为它应该只允许
  • 使用 Java 删除 XML 中的空标签

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