Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Красивое сохранение XML в файл / 4 сообщений из 4, страница 1 из 1
09.04.2015, 14:58
    #38931979
Let
Let
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Красивое сохранение XML в файл
Всем доброго дня!

Изначально стояла задача "красиво", т.к. со всеми табуляциями и переносами строк сохранять XML-файлы, т.е. чтобы открыл пользователь XML в блокноте - а там все как в браузере.

Для преобразования используется схема:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
<?xml version="1.0" encoding="windows-1251"?>  
 <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" encoding="windows-1251"/>
   <xsl:param name="indent-increment" select="'      '" />

   <xsl:template match="*">
      <xsl:param name="indent" select="'
'"/>

      <xsl:value-of select="$indent"/>
      <xsl:copy>
        <xsl:copy-of select="@*" />
        <xsl:apply-templates>
          <xsl:with-param name="indent"
               select="concat($indent, $indent-increment)"/>
        </xsl:apply-templates>
        <xsl:if test="*">
          <xsl:value-of select="$indent"/>
        </xsl:if>
      </xsl:copy>
   </xsl:template>

   <xsl:template match="comment()|processing-instruction()">
      <xsl:copy />
   </xsl:template>

   <xsl:template match="text()[normalize-space(.)='']"/>

</xsl:stylesheet>



Идея примерно такая:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
xmlFile as DOMDocument60
xlstFile as DOMDocument60
'тут генерация xml
'------
'------

'Открытие xsl-файла
xlstFile.Load "C:\schema.xsl"

'Трансформируем 
xmlFile.transformNodeToObject xlstFile.documentElement, resultXml

'Результат сохраняем.
resultXml.Save FileName



Все работало прекрасно, пока не столкнулся с таким случаем: в исходном XML в корневом узле появился атрибут xmlns, который после преобразования пропадает. Что это может быть? неправильный скрипт? Косяк MSXML60? Пожалуйста, помогите.
...
Рейтинг: 0 / 0
09.04.2015, 15:15
    #38932008
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Красивое сохранение XML в файл
LetЧто это может быть?Ошибка в XSL
...
Рейтинг: 0 / 0
09.04.2015, 15:19
    #38932018
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Красивое сохранение XML в файл
_Vasilisk_Ошибка в XSLХотя поторопился. У меня все работает
...
Рейтинг: 0 / 0
10.04.2015, 06:42
    #38932607
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Красивое сохранение XML в файл
Если имеете дело с MS - почему бы не использовать PowerShell? Там всё достаточно просто, и вообще без XSLT:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
$xw = [System.Xml.XmlWriter]::Create("D:\Trash\123.xml",
  (New-Object System.Xml.XmlWriterSettings -Property @{
    Indent = $true;               # по вкусу
    IndentChars = "`t";           # по вкусу
    NewLineOnAttributes = $true;  # по вкусу
  }));
([xml](Get-Content "D:\Projects\_misc\xml&xslt\xml\app.xml")).Save($xw);
$xw.Dispose();
"done" | oh;


Формат вывода определяется задаваемыми свойствами экземпляра XmlWriterSettings - подробнее см. здесь: https://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings(v=vs.110).aspx
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Красивое сохранение XML в файл / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]