2008-11-05 6 views
2

Проблема с XSLT-новичком: мне нужно подставить текстовое значение в XML-файл. Все остальные узлы должны быть оставлены без изменений. Вот мой входной файл (in.xml):Обработка только выбранных узлов

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <level1 attr1="val1"> 
     <level2>in</level2> 
    </level1> 
</root> 

Вот мой XSLT-преобразование (subst.xsl):

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

    <xsl:template match="/"> 
     <xsl:apply-templates /> 
    </xsl:template> 

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

    <xsl:template match="/root/level1/level2/text()">out</xsl:template> 
</xsl:stylesheet> 

я запустить его с помощью следующей Ant-скрипт (build.xml):

<?xml version="1.0" encoding="UTF-8"?> 
<project name="test" default="test" basedir="."> 
    <target name="test"> 
     <xslt style="subst.xsl" in="in.xml" out="out.xml" /> 
    </target> 
</project> 

И вот что я получаю (out.xml):

<?xml version="1.0" encoding="UTF-8"?><root> 
    <level1> 
     <level2>out</level2> 
    </level1> 
</root> 

Атрибут "attr1" для "level1" отсутствует.

Я был бы очень признателен, если кто-нибудь

  • скажите мне , что случилось с subst.xsl

ИЛИ

  • дать мне представление о том, как заставить XSLT-процессор просто скопируйте несогласованные узлы для вывода файла и сделать это вручную (это в моем случае ошибка-p Рона).

ответ

11

В вашем удостоверении личности отсутствуют атрибуты (очевидно). Используйте это вместо:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

Затем просто добавьте свой последний шаблон.

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