为了账号安全,请及时绑定邮箱和手机立即绑定

在 Java 中重命名所有 XML 标记名称

在 Java 中重命名所有 XML 标记名称

森林海 2021-09-12 16:07:03
我有一个带有这样前缀的 XML 文件:<h:table> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr></h:table><f:table> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length></f:table>我想重命名移动冒号的前缀以支持破折号,因此:<h-table> <h-tr> <h-td>Apples</h:td> <h-td>Bananas</h:td> </h-tr></h-table><f-table> <f-name>African Coffee Table</f:name> <f-width>80</f:width> <f-length>120</f:length></f-table>使用 DOM 解析器我知道可以按名称获取元素,但在我的情况下,我需要将它们全部应用重命名,因为模式始终相同。现在我不得不无数次写这个函数,因为一个只是为了一个标签:  NodeList nodes = document.getElementsByTagName("h:table");   for (Node eachNode: nodes) {  document.renameNode(eachNode, null, "h-table");  }是否可以使用更通用的方法?
查看完整描述

2 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

您可以像这样递归地遍历和重命名 DOM 元素:


private static void renameElement(Document document, Element element) {

    document.renameNode(element, null, element.getNodeName().replace(':', '-'));

    NodeList children = element.getChildNodes();

    for(int i = 0; i < children.getLength(); i++) {

        Node child = children.item(i);

        if (child instanceof Element) {

            renameElement(document, (Element) child);

        }


    }

}

从根元素开始递归:


renameElement(document, document.getDocumentElement());

但是,您应该考虑是否真的要破坏XML 命名空间格式良好的一致性。好的,它仍然是一致的,但你失去了元素命名空间绑定。


查看完整回答
反对 回复 2021-09-12
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

你总是可以回到痛苦的旧文本处理,你知道。只需搜索和替换正则表达式模式。搜索

<([^:]*):(.*)>

并替换<$1-$2>为起始标签。

如果您必须在 java 中执行此操作,则有java.util.regex 包。但是sed用于此类任务。


查看完整回答
反对 回复 2021-09-12
  • 2 回答
  • 0 关注
  • 217 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信