中存在動態節點名稱的節點的子節點此問題。如何訪問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'。當然,最後加上的身份轉換模板並沒有做任何事情。 –