Мне было интересно, было бы легко сделать это с помощью библиотеки XOM и попробовать.
Это оказалось довольно легко:
import nu.xom.*;
import java.io.File;
import java.io.IOException;
public class RemoveEmptyTags {
public static void main(String[] args) throws IOException, ParsingException {
Document document = new Builder().build(new File("original.xml"));
handleNode(document.getRootElement());
System.out.println(document.toXML()); // empty elements now removed
}
private static void handleNode(Node node) {
if (node.getChildCount() == 0 && "".equals(node.getValue())) {
node.getParent().removeChild(node);
return;
}
// recurse the children
for (int i = 0; i < node.getChildCount(); i++) {
handleNode(node.getChild(i));
}
}
}
Это, вероятно, не будет обрабатывать все случаи угловых должным образом, как совершенно пустой документ. И что делать с элементами, которые иначе пусты, но имеют атрибуты?
Если вы хотите сохранить XML-теги с атрибутами, мы можем добавить в методе «handleNode» следующая проверка:
... && ((Element) node).getAttributeCount() == 0))
Кроме того, если XML имеет два или более пустых тегов, один за другим; этот рекурсивный метод не удаляет все пустые теги!
(Этот ответ является частью моей оценки XOM как потенциального replacement to dom4j.)
Вы в настоящее время разбора XML в структуры данных в каждом конкретном пути (JDOM, и т.д.)? Или вы начинаете с нуля? –
Typo в примере XML: structure1 неправильно закрыт – Jonik