2013-10-12 6 views
0

У меня есть следующий файл .xmlКак удалить родительский узел все его дочерние узлы?

<?xml version="1.0" encoding="UTF-8"?> 
<bookstore> 
    <book id="1"> 
     <name>Book-1</name> 
     <author>Author-1</author> 
    </book> 
</bookstore> 

вопрос, я хочу, чтобы удалить книгу с id="1". Я хочу, чтобы удалить книжный узел, чтобы все его дочерние узлы были удалены автоматически. Есть ли способ сделать это?

ответ

1

Вы можете использовать XSLT скрипт:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes"/> 
    <xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="book[@id='1']"/> 
</xsl:stylesheet> 

В основном то, что один делает копирует весь файл без объектов, которые соответствуют шаблону "book[@id='1']"

XSLT, конечно, ввести некоторые накладные расходы, но преимущества:

  • Вы можете легко изменить преобразование, когда запрос становится более сложным
  • Механизм исполнения больше ошибок, чем код, который вы напишете сами (без обид, но XSLT-программы используются тысячами людей и, таким образом, легко отлаживаются ошибки)
  • Вы можете протестировать преобразования с помощью многочисленных программ с помощью жесткого кодирования трансформация вам придется написать testbench самостоятельно.
  • В некоторых случаях XSLT будет работать даже быстрее, потому что программисты пытаются оптимизировать выполнение.

Использование DOM-парсер (без указания весь файл, я надеюсь, что вы знакомы с DOM):

NodeList nList = doc.getElementsByTagName("book"); 
for (int temp = 0; temp < nList.getLength(); temp++) { 
    Node nNode = nList.item(temp); 
    if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
     Element eElement = (Element) nNode; 
     if(eElement.getAttribute("id").equals("1")) { 
      doc.removeChild(eElement); 
     } 
    } 
} 
+1

Как интегрировать его с Android? –

+0

Поскольку копирование вводит избыточность, я укажу на этот вопрос: http://stackoverflow.com/questions/6215001/convert-xml-file-using-xslt-in-android –

+0

купите его, спасибо +1 –

0

Существует еще одно простое решение, доступное для синтаксического анализа файла XML в целом. Просмотрите документацию по адресу Xstream

Смежные вопросы