我有一个简单的 v1.0 样式表,如下所示。它需要是 v1.0:
<xsl:stylesheet version = "1.0" xmlns="http://<redacted>" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/02/xpath-functions">
<xsl:output method="xml"/>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/PFA">
<data>
<record skip="true">
<value name="Id" type="string"/>
<value name="NameType" type="string"/>
<value name="Suffix" type="string"/>
<value name="CarName" type="string"/>
</record>
<xsl:apply-templates select="Records/Car"/>
</data>
</xsl:template>
<xsl:template match="Car">
<xsl:apply-templates select="NameDetails/Name">
<xsl:with-param name="id" select="@id"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="Name">
<xsl:param name="id"/>
<record>
<value name="Id">
<xsl:value-of select="$id"/>
</value>
<value name="NameType">
<xsl:value-of select="@NameType"/>
</value>
<value name="Suffix">
<xsl:value-of select="NameValue/Suffix"/>
</value>
<value name="CarName">
<xsl:value-of select="NameValue/CarName"/>
</value>
</record>
</xsl:template>
</xsl:stylesheet>
我还有一个包含 1 条记录的 XML 文件,该记录具有多个属性:
<?xml version="1.0" encoding="UTF-8"?>
<PFA date="202410281000" type="full">
<Records>
<Car id="1023956" action="add" date="26-Feb-2024">
<NameDetails>
<Name NameType="Primary Name">
<NameValue>
<CarName>Porsche 911 Turbo</CarName>
</NameValue>
</Name>
<Name NameType="Also Known As">
<NameValue>
<Suffix>Turbo</Suffix>
<CarName>Neunelf</CarName>
</NameValue>
<NameValue>
<Suffix>GT1</Suffix>
<CarName>Porsche AG 911</CarName>
</NameValue>
</Name>
<Name NameType="Formerly Known As">
<NameValue>
<Suffix>356</Suffix>
<CarName>Porsche</CarName>
</NameValue>
</Name>
<Name NameType="Spelling Variation">
<NameValue>
<CarName>Porshe 911</CarName>
</NameValue>
<NameValue>
<Suffix>Turbo</Suffix>
<CarName>911</CarName>
</NameValue>
</Name>
</NameDetails>
</Car>
</Records>
</PFA>
当我将 XML 读入我的第三方应用程序时,它适用于仅具有单个值的两个 NameType(即Primary Name和Formerly Known As)。
但是,对于具有多个值的两个 NameType,它只会返回一个值。此外,对于拼写变体,它似乎会从一个 NameValue 中挑选出 CarName,并从另一个 Name Value 中挑选出后缀(即,它应该将“911”和“Turbo”放在一起,而不是“Porshe 911”和“Turbo”。)
我得到的是:
但我希望得到的是:
有人能帮我渲染缺失的行吗?非常感谢。
看看这是否适合你:
XSLT 1.0