2013-06-03 4 views
1

Я работаю с xslt для очистки html-кода, который создается редактором.XSLT recursive html clean

Код содержит следующую структуру:

<span name="x">1<b>test text</b> 
    <span name="y">2</span> 
</span> 
<span name="y">3 
    <span name="y">4</span> 
    <span name="x">1</span> 
</span> 
<span name="y">5<i>test</i> 
    <span name="y"><u>6</u>7</span> 
</span> 

Дело в том, что нужно XSLT сохранить структуру HTML. И нужно выполнить 2 действия. , если он находит пролет с именем x. Он должен удалить его. (Это не проблема)

Но когда он находит y, который не находится внутри x. Ему нужно взять дочерние узлы (значение node()) и поместить их в выходной файл. Дочерние узлы должны быть проверены для любых других интервалов.

A.t.m У меня были некоторые xslt, которые находили первые уровни (числа 1 и 3). Но он копирует внутренний html и не применяет шаблоны для innerHTML.

У кого-нибудь возникла эта проблема или вы знаете решение?

РЕДАКТИРОВАТЬ: Требуется выход, как описано выше.

345<i>test</i><u>6</u>7 

EDIT2: XSLT

<xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="span[@name='x']"> 
//This deletes the node.. But only one level? 
</xsl:template> 
<xsl:template match="span[@name='y']"> 
//This needs to play all templates again to remove or get inner nodes() see case x & y 
</xsl:template> 
+1

Pls. поделитесь своим сгенерированным XSLT и требуемым выходом. –

+1

См. Изменения в моем сообщении – spons

+3

Это отлично работает для меня, если вы добавили в template –

ответ

1

Вам просто нужно включить применять-шаблоны в последнем шаблоне, чтобы получить желаемый выход.