中存在动态节点名称的节点的子节点此问题。如何访问XSLT
我有这样的XML:
<Document>
<Type>ABC</Type>
<Header>
<Date>15-01-2017</Date>
<Time>11:00 AM</Time>
</Header>
<Body>
<Name>Juan</Name>
<Age>10</Age>
<Address>
<City>City</City>
<Country>Country</Country>
<Block>Block</Block>
</Address>
</Body>
</Document>
,我有这个XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<xsl:variable name ="DocumentType" select ="//Document/Type" />
<xsl:template match ="Document">
<Root>
<xsl:apply-templates select ="Header" />
<xsl:element name="Data{$DocumentType}">
<xsl:call-template name="Data">
<xsl:with-param name="type" select ="$DocumentType" />
</xsl:call-template>
</xsl:element>
</Root>
</xsl:template>
<xsl:template name ="Data">
<xsl:param name="type" />
<Name>
<xsl:value-of select ="Body/Name" />
</Name>
<Age>
<xsl:value-of select ="Body/Age" />
</Age>
<xsl:element name="Address{$type}">
<City>
<xsl:value-of select ="City"/>
</City>
<Country>
<xsl:value-of select ="Country"/>
</Country>
<Block>
<xsl:value-of select ="Block"/>
</Block>
</xsl:element>
</xsl:template>
<xsl:template match ="Header">
<Header>
<DateCreated>
<xsl:value-of select ="Date"/>
</DateCreated>
<TimeCreated>
<xsl:value-of select ="Time"/>
</TimeCreated>
</Header>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
我的问题是我不能访问XML中的地址的子节点的值,我只看到这个:
<Root>
<Header>
<DateCreated>15-01-2017</DateCreated>
<TimeCreated>11:00 AM</TimeCreated>
</Header>
<DataABC>
<Name>Juan</Name>
<Age>10</Age>
<AddressABC>
<City></City>
<Country></Country>
<Block></Block>
</AddressABC>
</DataABC>
</Root>
任何人都可以帮助我向我展示我的错误。
感谢
我很困惑为什么你将模板应用到'Header',但是选择调用一个命名模板来处理'Body'。当然,最后加上的身份转换模板并没有做任何事情。 –