Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Удаление элемента и его содержимого.


Автор: GlooMMy 8.6.2010, 09:35
Как удалить элемент и все его содержимое (если существуют дочерние то их тоже) из файла xml с помощью xslt?
Элементов с таким именем может быть много и всех их нужно удалить.

Автор: diadiavova 8.6.2010, 11:28
Просто включи в преобразование шаблон, который будет соответствовать ненужному элементу и оставь шаблон пустым.

Автор: GlooMMy 8.6.2010, 12:44
Можно пример кода?
Допустим необходимо удалить other и все что вложено в него.
Код

<root>
    <other>
        <temp>lsdkjf</temp>
        <temp_1 at="23"/>
    <other/>
    <a>
        <b> woeiruwe </b>
    </a>
    <other> lsdf </other>        
<root/>

Автор: diadiavova 8.6.2010, 12:58
Код

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

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

Единственная оговорка: в закрывающих тегах слешь стоит в начале, а не как у тебя smile 

Автор: GlooMMy 8.6.2010, 13:50
апячаткаsmile
Что-то ничего не изменилось...
У меня элемент глубоко вложен, может из-за этого?

Автор: diadiavova 8.6.2010, 13:56
Цитата(GlooMMy @  8.6.2010,  14:50 Найти цитируемый пост)
Что-то ничего не изменилось... 

В каком смысле не изменилось? smile 
Вот такой документ я япреобразовывал
Код

<?xml version="1.0" encoding="utf-8"?>
<root>
    <other>
        <temp>lsdkjf</temp>
        <temp_1 at="23"/>
    </other>
    <a>
        <b> woeiruwe </b>
    </a>
    <other> lsdf </other>
</root>

И вот что получилось
Код

<?xml version="1.0" encoding="utf-8"?>
<root>
    
    <a>
        <b> woeiruwe </b>
    </a>
    
</root>
На сколько я понял именно это и было нужно.

Добавлено через 51 секунду
Цитата(GlooMMy @  8.6.2010,  14:50 Найти цитируемый пост)
апячатка

В двух местах. smile 

Автор: GlooMMy 8.6.2010, 14:01
еще раз ща проверю..
работает
а на моем файле не работает:(

Автор: GlooMMy 8.6.2010, 14:20
что не так в этой строчке?
Код

<document xmlns='http://www.lotus.com/dxl' version='7.0' maintenanceversion='4.0'
 replicaid='C22576C1003D82B3' form='LearnKartStud' parent='C7B2988098D73627C225734700389A5A'
 response='true'>


Автор: diadiavova 8.6.2010, 14:28
Цитата(GlooMMy @  8.6.2010,  15:01 Найти цитируемый пост)
а на моем файле не работает:(

Ща я твой файл оттелепатирую - объясню smile 
Цитата(GlooMMy @  8.6.2010,  15:20 Найти цитируемый пост)
что не так в этой строчке?

С точки зрения синтаксиса вроде всё нормально. А при чём тут эта строчка?

Автор: GlooMMy 9.6.2010, 08:43
Когда убираю все атрибуты у элемента document, то все работает, а с ними нет.smile
а именно дело в атрибуте: xmlns='http://www.lotus.com/dxl' 

Автор: diadiavova 9.6.2010, 10:01
Цитата(GlooMMy @  9.6.2010,  09:43 Найти цитируемый пост)
а именно дело в атрибуте: xmlns='http://www.lotus.com/dxl' 

Это не атрибут, а пространство имён. В документах с с пространствами имён без префиксовподобные трудности бывают. Тут надо либо добавить префикс, либо проверять в атрибуте match шаблона принадлежность к данному пространству с помощью функции http://msdn.microsoft.com/ru-ru/library/ms256466.aspx. Сначала попробуй переписать узел так
Код

<document xmlns='http://www.lotus.com/dxl' xmlns:a='http://www.lotus.com/dxl' version='7.0' maintenanceversion='4.0'
 replicaid='C22576C1003D82B3' form='LearnKartStud' parent='C7B2988098D73627C225734700389A5A'
 response='true'>
А в шаблоне укажи
Код

match="a:document"

Не выйдет - тогда используй один из вышеозначенных способов.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)