我有如下所述的源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()
答案 0 :(得分:0)
您的XSLT样式表工作正常,您只需删除tns:Information
的模板。
我必须修复名称空间,不能只用星号替换它们。
在此处检查小提琴:http://xsltransform.net/bEJaogP