Страницы: 1
RSS
VBA. Экспорт из Excel в xml. Как создать самозакрывающийся тег xml
 
Задача сформировать xml файл.
Тег "photo" должен быть самозакрывающийся:
Код
<photo url="pic1.jpg" />

Сейчас получается создать только парные теги:
Код
<photo url="pic1.jpg">
</photo>
Код
    Set createImg = createGood.appendChild(xml.createElement("photo"))
    createImg.setAttribute "url", photo
 
Доброе время суток
Цитата
Евгений Кириллов написал:
Сейчас получается создать только парные теги:
Создаётся узел нормально, а вот transformXML его "корёжит".
 
Благодарю.
Подскажите как отформатировать вывод xml с отступами, но без замены самозакрывающихся тегов?

Как переделать этот код? Или есть другой способ?
Код
'Процедура для придания XML читабельного вида (с отступами)
Sub transformXML(ByRef xml As Variant)

    'Cоздание объекта XSL
    Set xsl = CreateObject("MSXML2.DOMDocument")
    
    'Загрузка XSL из строки (не требует наличия отдельного XSL-файла)
    xsl.LoadXML ("<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>" & vbCrLf & _
    "<xsl:output method='xml' version='1.0' encoding='UTF-8' indent='yes'/>" & vbCrLf & _
    "<xsl:template match='@*|node()'>" & vbCrLf & _
    "<xsl:copy>" & vbCrLf & _
    "<xsl:apply-templates select='@*|node()' />" & vbCrLf & _
    "</xsl:copy>" & vbCrLf & _
    "</xsl:template>" & vbCrLf & _
    "</xsl:stylesheet>")
    
    'Выполнение преобразования
    xml.transformNodeToObject xsl, xml

End Sub
Изменено: Евгений Кириллов - 22.08.2017 06:33:05
 
Цитата
Евгений Кириллов написал:
Или есть другой способ?
Есть конечно. Библиотека Microsoft XML v6.0 подключена явно.
Код
Public Sub WriteWithIndent(ByVal xmlDoc As Object, ByVal FileName As String)
    Dim pWriter As New MSXML2.MXXMLWriter60
    Dim pReader As New MSXML2.SAXXMLReader60

    pWriter.omitXMLDeclaration = False
    pWriter.indent = True
    Set pReader.contentHandler = pWriter
    pReader.putProperty "http://xml.org/sax/properties/lexical-handler", pWriter
    pReader.Parse xmlDoc.xml
    xmlDoc.LoadXML pWriter.output
    xmlDoc.FirstChild.Attributes(1).NodeValue = "UTF-8"
    xmlDoc.Save FileName
End Sub

Как через трансформацию работать не знаю, никогда не использовал. Человеку лучше смотреть таблицу в Excel, а программам для чтения xml данных, полученных из Excel, всё равно - есть ли отступы или нет отступов. :)
Успехов.
Страницы: 1
Наверх