Версия 12 Studio Sun является бесплатной загрузкой (СВОБОДНАЯ и заплаченная доступная поддержка) - http://developers.sun.com/sunstudio/downloads/thankyou.jsp?submit=%A0FREE+Download%A0%BB%A0 .
я уверен, что у Вас есть завершение кода и отлаживающий поддержку включая сменную поддержку в этом IDE.
Studio Sun доступен для Linux, а также Соляриса. форумы: http://developers.sun.com/sunstudio/community/forums/index.jsp . Studio Sun форумы Linux: http://forum.sun.com/forum.jspa?forumID=855
я буду стремиться услышать Вашу обратную связь на этом инструменте.
BR,
~A
Мне было интересно, будет ли это легко сделать с помощью библиотеки 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 как потенциальной замены dom4j .)
Эта таблица стилей XSLT должна делать то, что вы ищете:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:if test=". != '' or ./@* != ''">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Она должна также сохранять элементы, которые пусты, но имеют атрибуты, которых нет. Если вам не нужно такое поведение, измените:
To:
Если вы хотите знать, как применять XSLT в Java, на Interwebs должно быть множество руководств. Удачи!
В качестве примечания: разные состояния тега на самом деле имеют значение:
null
или nil
Итак, удалив пустой Open- Закрытые теги и одиночные теги, вы объединяете их с группой отсутствующих тегов и, таким образом, теряете информацию.
Если xml подается как строка; регулярное выражение можно использовать для фильтрации пустых элементов:
<(\\w+)></\\1>|<\\w+/>
Это найдет пустые элементы.
data.replaceAll(re, "")
data в данном случае переменная, содержащая вашу строку xml.
Я не говорю, что это лучшее решение, но это возможно ...
С помощью XSLT вы можете преобразовать свой XML, чтобы игнорировать пустые теги и переписать документ.