2014-02-01 7 views
0

У меня есть этот фрагмент xsl, который я хочу применить к XML-файлу. Данные xpath в матче верны, я его протестировал. Я хочу добавить атрибут font для каждого ITEXT, который не имеет одного с указанным значением. Как мне это сделать?Как использовать xsl для обновления xml-файла

<xsl:template match="//PAGEOBJECT[@LAYER=2]/ITEXT[not(@FONT)]"> 
     <xsl:attribute name="FONT">Book Antiqua Regular</xsl:attribute> 
    </xsl:template> 

Sample фрагмент XML:

<ITEXT FONT="Book Antiqua Italic" KERN="-1" CH="somedata"/> 
<ITEXT CH="somedata"CH="somedata"/> 
<ITEXT FONT="Book Antiqua Italic" CH="somedata"/> 
<ITEXT CH="somedata"/> 
<ITEXT FONT="Book Antiqua Italic" CH="somedata"/> 
<ITEXT FONT="Book Antiqua Italic" CH="somedata"/> 
<ITEXT FONT="Book Antiqua Italic" CH="somedata"/> 
<ITEXT CH="somedata"/> 
<ITEXT CH="somedata"/> 

ответ

1

Вы большую часть пути. Начните с идентификацией стилями:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

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

    <!-- Insert additional templates here.... --> 

</xsl:stylesheet> 

Где отмечено, вставить шаблон для обработки вашего особого случая - который был почти прав, за исключением того, что вам нужно скопировать элемент, который вы добавляете атрибут, и вы необходимо скопировать другие атрибуты и ребенок (это «идентичность, но добавить этот атрибут»)

<xsl:template match="//PAGEOBJECT[@LAYER=2]/ITEXT[not(@FONT)]"> 
    <xsl:copy> 
    <xsl:attribute name="FONT">Book Antiqua Regular</xsl:attribute> 
    <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

Заметьте, что вам может не понадобиться, что сложное выражение соответствия; вероятно, достаточно сказать match="ITEXT[not(@FONT)]"

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