2010-04-17 2 views
0

У меня есть файл размером 300 КБ xml с 70 элементами в нем. Мне нужно быть эффективным при удалении одного из элементов корня. Каков наилучший подход?Удалить элемент из xml-файла с помощью jdom

  • Должен ли я отсоединить элемент памяти, сохранить его и перезаписать, перемещая его?
  • Есть ли лучший вариант?

Мне нравится org.jdom, но любое усовершенствование приветствуется

ответ

1

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

Если вы хотите исключить, достаточно просто и легко выполнить поиск, вы также можете обработать файл и записать его, пока вы его читаете, не переписывая то, что вы хотите исключить .. это может быть проще, чем разбор его ..

+0

На самом деле существует способ работы с XML-файлами без разбора, ВТД-XML имеет встроенную функцию индексации, которая обходит накладные расходы на разбор ... при условии, что один предварительно разбирает документа и сохраняет индекс вместе с XML. Он называется vtd + xml ... http://www.codeproject.com/Articles/24663/Index-XML-Documents-with-VTD-XML –

1

Что относительно простого XSLT, который копирует все XML-данные вперед, за исключением конкретных элементов, которые вы не хотите?

Вы можете использовать модифицированный identity transform и просто добавить пустые шаблоны для элементов, которые вы хотите подавить.

Например:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

    <xsl:template match="/"> 
     <xsl:apply-templates/> 
    </xsl:template> 

    <!--Identity transform copies all nodes and attributes by default --> 
    <xsl:template match="@* | node()"> 
     <xsl:copy> 
      <xsl:apply-templates /> 
     </xsl:copy> 
    </xsl:template> 

    <!--Create an empty template for the elements that you want to suppress--> 
    <xsl:template match="ElementToRemove" /> 

</xsl:stylesheet> 
Смежные вопросы