Есть несколько способов приблизиться к этому:
XSL T сделает это очень просто, если у вас есть фиксированный список ввода, вы можете написать преобразование, которое выбирает только допустимые элементы и выводит их,Таким образом, вам не нужно писать какой-либо код, и вы можете использовать что-то вроде xsltproc , что очень быстро!
Это то, что я бы попробовал сначала, потому что он специально создан для преобразования XML в другой XML, он меньше кода и меньше кода, меньше обслуживания.
Вотпредставление о том, как начать, выводит все элементы <document/>
, где элементы <value/>
не равны ABC
.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<!-- this matches ALL nodes and ALL attributes -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- this matches the entire document element where value = 'ABC' -->
<xsl:template match="document[entry[commentfield[value[(text()='ABC')]]]]"/>
</xsl:stylesheet>
На XSLT
имеется множество ресурсов и хороших книг.все, что вам нужно сделать, это предоставить белый список поддерживаемых <value/>
элементов и изменить логику в моем примере.
Если у вас есть .xsd
или , вы можете создать один , ваш вводФайл не выглядит очень сложным, вы можете использовать JAXB для автоматической генерации иерархии объектов, чтобы проанализировать входной файл, а затем вы можете просмотреть получившийся граф объектов и удалить все, что не соответствует вашим критериям, и перенести его обратно в файл.
JAXB не очень жизнеспособен, если размер файла больше, чем умещается в памяти.