亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 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 關注
  • 239 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號