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

我有一个带有这样前缀的 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");

  }

是否可以使用更通用的方法?


森林海
浏览 218回答 2
2回答

墨色风雨

您可以像这样递归地遍历和重命名 DOM 元素:private static void renameElement(Document document, Element element) {&nbsp; &nbsp; document.renameNode(element, null, element.getNodeName().replace(':', '-'));&nbsp; &nbsp; NodeList children = element.getChildNodes();&nbsp; &nbsp; for(int i = 0; i < children.getLength(); i++) {&nbsp; &nbsp; &nbsp; &nbsp; Node child = children.item(i);&nbsp; &nbsp; &nbsp; &nbsp; if (child instanceof Element) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; renameElement(document, (Element) child);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}从根元素开始递归:renameElement(document, document.getDocumentElement());但是,您应该考虑是否真的要破坏XML 命名空间格式良好的一致性。好的,它仍然是一致的,但你失去了元素命名空间绑定。

小唯快跑啊

你总是可以回到痛苦的旧文本处理,你知道。只需搜索和替换正则表达式模式。搜索<([^:]*):(.*)>并替换<$1-$2>为起始标签。如果您必须在 java 中执行此操作,则有java.util.regex 包。但是sed用于此类任务。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java