2016-07-19 3 views
0

Я уже использовал функцию поиска, но я не нашел ответа на свой вопрос.Удалить теги между конкретными тегами в XML (Notepad ++)

У меня есть XML-структуру, подобную следующей (пример):

<Task name="1B"> 
<Person type ="XX" name="YY" height="ZZ"/> 
<Person type ="XX" name="YY" height="ZZ"/> 
<Person type ="XX" name="YY" height="ZZ"/> 
</Task> 

<Task name="1C"> 
<Person type ="XX" name="YY" height="ZZ"/> 
<Person type ="XX" name="YY" height="ZZ"/> 
<Person type ="XX" name="YY" height="ZZ"/> 
</Task> 

Теперь я хочу, чтобы удалить с помощью Notepad ++ тег с именем «1B» и все теги между открытым и закрывающим тегом. Есть ли способ в Блокноте? Я уже пробовал с RegEx Pattern, но я не получил правильного пути.

+0

Поиск '<Имя задачи =«1B»> *.? <\/Task> 'Заменить ничем. –

+0

Не работает. Не удается найти текст в моем XML. – Phyllis

ответ

1

Использование регулярного выражения с HTML сильно обескуражено, поскольку это приводит ко многим вопросам и ненужным вопросам. См. RegEx match open tags except XHTML self-contained tags. Использование XSLT для преобразования XML - это инструмент, который вам действительно нужен.

Создание UTF-8 кодированный файл с remove_xml_tag.xsl именем образца и вставьте в него:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="Task[@name='1B']"/> 
</xsl:stylesheet> 

Процессы XSL каждый узел и атрибут (node()|@*), и когда он встречает Task элемент с name атрибута равно 1B ("Task[@name='1B']") он просто не записывает его в выходной файл.

Затем запустите XML Tools плагин - Трансформация>XSL. Вы увидите:

enter image description here

Нажмите ... кнопку справа и найдите файл XSL.

Нажмите Transform кнопка.

запасной вариант решения в случае, если у вас есть некорректный XML, который будет работать только если у вас нет вложенных Task узлов:

<Task\s+name="1B">[^<]*(?:<(?!/Task>)[^<]*)*</Task> 
+0

Я попробую, спасибо! :) – Phyllis

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