Преобразование XML для создания отношения Parent-Child с использованием XSLT (загрузка данных в AccessDB - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть исходный XML, как указано ниже ...

<?xml version="1.0" encoding="UTF-8"?><tns:DATA xmlns:soap-env="*****" xmlns:tns="****" xmlns:nxsd="*****"><tns:Information><tns:tenantId>PARENT_STRING1</tns:tenantId><tns:userSessionId>PARENT_STRING2</tns:userSessionId><tns:startTime>PARENT_STRING3</tns:startTime><tns:endTime>PARENT_STRING4</tns:endTime><tns:duration>PARENT_STRING5</tns:duration><tns:userActions><tns:name>CHILD_STRING1</tns:name><tns:domain>CHILD_STRING2</tns:domain>    <tns:targetUrl>CHILD_STRING3</tns:targetUrl><tns:type>CHILD_STRING4</tns:type>... etc</tns:userActions>....etc</tns:Information></tns:DATA>

И я хочу преобразовать это в

<?xml version="1.0" encoding="UTF-8"?><tns:DATA xmlns:soap-env="*****" xmlns:tns="****" xmlns:nxsd="*****"><tns:Information><tns:tenantId>PARENT_STRING1</tns:tenantId><tns:userSessionId>PARENT_STRING2</tns:userSessionId><tns:startTime>PARENT_STRING3</tns:startTime><tns:endTime>PARENT_STRING4</tns:endTime><tns:duration>PARENT_STRING5</tns:duration><tns:userActions><tns:userSessionId>PARENT_STRING2</tns:userSessionId><tns:startTime>PARENT_STRING3</tns:startTime><tns:endTime>PARENT_STRING4</tns:endTime><tns:duration>PARENT_STRING5</tns:duration><tns:name>CHILD_STRING1</tns:name><tns:domain>CHILD_STRING2</tns:domain><tns:targetUrl>CHILD_STRING3</tns:targetUrl><tns:type>CHILD_STRING4</tns:type>... etc</tns:userActions>....etc</tns:Information></tns:DATA>

Я использую XSLT, как указано ниже,

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:tns="http://www.esa.int/tns/sentinel-1.0">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>

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

<xsl:template match="tns:Information">
    <xsl:apply-templates select="@*|node()"/>
</xsl:template>

<xsl:template match="tns:userActions">
    <tns:userActions>
        <tns:tenantId><xsl:value-of select="../tns:tenantId"/></tns:tenantId>
        <tns:ParentStartTime><xsl:value-of select="../tns:startTime"/></tns:ParentStartTime>
        <tns:ParentEndTime><xsl:value-of select="../tns:endTime"/></tns:ParentEndTime>
        <xsl:apply-templates select="@*|node()"/>
    </tns:userActions>
</xsl:template>

XSLT не работает, а XML не конвертируется в мой ожидаемый формат.Подскажите, пожалуйста, что мне здесь не хватает ... ???

Большое спасибо.!

Моя часть кода VBA, чтобы сделать то же самое, упомянута ниже,

  ' LOAD XML SOURCE
  'xmlDoc.Load strPath & strFile
  xmlDoc.Load strPath & strFile

  If (xmlDoc.parseError.errorCode <> 0) Then
    MsgBox ("Error loading source document: " & xmlDoc.parseError.reason)
    Exit Sub
    Else
  If (xslDoc.parseError.errorCode <> 0) Then
    MsgBox ("Error loading stylesheet document: " & xslDoc.parseError.reason)
    Exit Sub
    Else
     ' Do the transform.
     xmlDoc.transformNodeToObject xslDoc, newDoc
     newDoc.Save "C:\temp\temp.xml"
     Application.ImportXML "C:\temp\temp.xml", acAppendData
     strFile = Dir()
  End If
  End If

  ' TRANSFORM SOURCE
  'xmlDoc.transformNodeToObject xslDoc, newDoc

  'newDoc.Save "C:\temp\temp.xml"

  ' APPEND TO TABLES
  ' Application.ImportXML "C:\temp\temp.xml", acAppendData
  ' strFile = Dir()

1 Ответ

0 голосов
/ 01 октября 2018

Ваша таблица стилей XSLT работает нормально, вам просто нужно удалить шаблон для tns:Information.

Мне пришлось исправить пространства имен, вы не можете просто заменить их звездочками.

Проверьте скрипку здесь: http://xsltransform.net/bEJaogP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...