2015-07-21 6 views
0

Я использую XSLT 2.0 для извлечения данных из XHTML-файлов. Я хочу избавиться от всех атрибутов, кроме href. Эта версия преобразования идентичности удаляет все атрибуты. Обратите внимание, что он не копирует никаких атрибутов, потому что @* не используется.Атрибуты фильтрации XSLT 2.0 с преобразованием идентичности

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

Я попытался с помощью @* и фильтрации для href, но он не работает.

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

Я получаю сообщение The child axis starting at an attribute node will never select anything. Я также попытался использовать другие конструкции, как @*[@href] и @*[[email protected]*], и я получаю такое же сообщение. Я использую Saxon HE 9.5.1.4.

Могу ли я выборочно копировать только определенные атрибуты (и их значения) с преобразованием идентичности или мне нужно сделать это по-другому?

+0

Ваша конструкция '@ * [HREF]' означает "выбрать все атрибуты, которые имеют HREF элемента, как ребенок". Предупреждение Саксона говорит вам, что у атрибутов нет элементарных детей, поэтому это не разумная вещь, о которой нужно просить. –

ответ

2

Try:

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

Я пробовал это, и это не сработало. Он правильно обрабатывал элементы и атрибуты 'href', но не удался по всем другим атрибутам. Атрибут был удален и вместо этого было вставлено текстовое значение. Это означает, что на выходе появились такие результаты, как «margin-top: 3px; margin-bottom: 0pxcenterUNITED STATES» вместо «СОЕДИНЕННЫЕ ШТАТЫ». –

+0

У меня была опечатка, которую я теперь исправил. Но это не ** вызвало бы проблему, которую вы описываете. Если у вас все еще есть проблема, отправьте способ ее воспроизведения. См. Рабочую демонстрацию здесь: http://xsltransform.net/6qVRKx1 –

+0

Это исправлено. Огромное спасибо. Я продолжал рассматривать проблему, и я начал понимать, что происходит, и когда я увидел ваш исправленный ответ, все стало ясно. Между твоей помощью и замечанием Микаэла Кей комментарии не только я исправить, я узнал некоторые очень полезные вещи. Еще раз благодарю вас за обмен опытом. –

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