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

Изначально стояла задача "красиво", т.к. со всеми табуляциями и переносами строк сохранять 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
Красивое сохранение XML в файл
    #38932008
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LetЧто это может быть?Ошибка в XSL
...
Рейтинг: 0 / 0
Красивое сохранение XML в файл
    #38932018
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Ошибка в XSLХотя поторопился. У меня все работает
...
Рейтинг: 0 / 0
Красивое сохранение XML в файл
    #38932607
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если имеете дело с 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
4 сообщений из 4, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Красивое сохранение XML в файл
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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