Переименование всех имен тегов XML в Java - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть 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 ]

0 голосов
/ 10 сентября 2018

Вы можете рекурсивно проходить и переименовывать элементы 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 .Хорошо, он все еще соответствует, но вы теряете привязку пространства имен элемента.

0 голосов
/ 10 сентября 2018

Вы всегда можете вернуться к боли старой обработки текста, вы знаете. Просто найдите и замените шаблон регулярных выражений. поиск

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

и замените на <$1-$2> для начальных тегов.

Если вам нужно сделать это в Java, есть пакет java.util.regex . Но сед скал для таких задач.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...