Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2013, 16:23   #1
нцп
Новичок
Джуниор
 
Регистрация: 15.05.2013
Сообщений: 1
По умолчанию Не записывает результат XSLT преобразования

Среда разработки Delphi 2009.
Подключаю модуль «MSXML2_TLB» (msxml6.dll)
Проблема заключается в XSLT преобразование, а именно, когда после выполнения преобразования должен получиться не xml-валидный документ, результат не записывается в выходной файл. В случае, когда мы ожидаем на выходе xml-валидный документ, результат записывается в выходной файл.
Код:
var
                xmlSource: DOMDocument60;
                 xmlStylesheet: DOMDocument60;
                 xmlResult:     DOMDocument60;
                
…
                
begin

  xmlSource := CoDOMDocument60.Create;
  xmlStylesheet := CoDOMDocument60.Create;
  xmlResult:=CoDOMDocument60.Create;

  xmlSource.async:=false;
  xmlStylesheet.async:=false;
  xmlResult.async:=false;

  xmlSource.load('hello.xml');
  xmlStylesheet.load('hello.xsl');

  xmlResult.loadXML(xmlSource.transformNode(xmlStylesheet));

 xmlResult.save('result1.mht');//вне зависимости какой формат. По постановке задач должен записывать в mht, который не //xml-валидный

end;
Входной xml:

Код:
<items>
    <item source="a" name="A"/>
    <item source="b" name="B"/>
    <item source="a" name="C"/>
    <item source="c" name="D"/>
    <item source="b" name="E"/>
    <item source="b" name="F"/>
    <item source="c" name="G"/>
    <item source="a" name="H"/>
</items>
XSLT преобразование:
Код:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:key name="src" match="item" use="@source"/>
    <xsl:template match="items">
        <xsl:text>check</xsl:text>//запись слова за пределами главного тега, что делает выходной файл не xml-валидным. Если его убрать, то программа на Delphi запишет результат в выходной файл
        <sources>           
            <xsl:apply-templates select="item[generate-id(.)=generate-id(key('src',@source))]"/>
        </sources>
    </xsl:template>
    <xsl:template match="item">
        <source name="{@source}">
            <xsl:copy-of select="key('src',@source)"/>
        </source>
    </xsl:template>
</xsl:stylesheet>
Возможно не тем способом делаю преобразование? Или упустил какие-то параметры? Подскажите кто знает.
Результат нужно записывать сразу в выходной файл, промежуточные строковые переменные использовать нельзя.
нцп вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странно записывает в файл PotatoCaptain Общие вопросы C/C++ 11 17.01.2012 16:26
Работа с XSLT Xanex Общие вопросы .NET 0 09.08.2011 16:47
XSLT циклы chexov HTML и CSS 0 01.07.2010 17:26
Не записывает данные в БД Abuhamed PHP 9 16.04.2010 20:57
Не записывает в переменную beemoto Общие вопросы Delphi 22 30.10.2009 11:25