【发布时间】:2017-06-09 16:09:19
【问题描述】:
我有以下 XML:
<?xml version="1.0" encoding="utf-8"?>
<NewDataSet>
<GUID>
<Active>true</Active>
<ContractName>Contract Name</ContractName>
<ContractNumber>Auto</ContractNumber>
<DateOfBirth>16/01/1988</DateOfBirth>
<FirstName>Fred</FirstName>
<Notes>some notes</Notes>
<PlaceOfResidence>United Kingdom</PlaceOfResidence>
<RowNumber>1</RowNumber>
<TableName>PersonDetails</TableName>
</GUID>
<GUID>
<Active>true</Active>
<ContractName>Contract Name</ContractName>
<ContractNumber>Auto</ContractNumber>
<DateOfBirth>01/01/1960</DateOfBirth>
<FirstName>Harold</FirstName>
<Notes>some notes</Notes>
<PlaceOfResidence>United Kingdom</PlaceOfResidence>
<RowNumber>2</RowNumber>
<TableName>PersonDetails</TableName>
</GUID>
<GUID>
<Active>true</Active>
<ContractName>Contract Name</ContractName>
<ContractNumber>Auto</ContractNumber>
<DateOfBirth>05/05/1955</DateOfBirth>
<FirstName>Mary</FirstName>
<Notes>some notes</Notes>
<PlaceOfResidence>United States</PlaceOfResidence>
<RowNumber>3</RowNumber>
<TableName>PersonDetails</TableName>
</GUID>
<GUID>
<ContractName>Contract Name</ContractName>
<ContractNumber>Auto</ContractNumber>
<CoverType>Property</CoverType>
<DateAdded>01/06/2017</DateAdded>
<Notes>some notes</Notes>
<RowNumber>1</RowNumber>
<TableName>Covers</TableName>
</GUID>
<GUID>
<ContractName>Contract Name</ContractName>
<ContractNumber>Auto</ContractNumber>
<CoverType>Motor</CoverType>
<DateAdded>01/06/2017</DateAdded>
<Notes>some notes</Notes>
<RowNumber>2</RowNumber>
<TableName>Covers</TableName>
</GUID>
<GUID>
<ContractName>Contract Name</ContractName>
<ContractNumber>Auto</ContractNumber>
<CoverType>Liability</CoverType>
<DateAdded>01/06/2017</DateAdded>
<Notes>some notes</Notes>
<RowNumber>3</RowNumber>
<TableName>Covers</TableName>
</GUID>
</NewDataSet>
我需要将其转换为以下内容:
<data>
<ContractName>Contract Name</ContractName>
<ContractNumber>Auto</ContractNumber>
<Table>
<TableRow RowNumber="1" TableName="PersonDetails">
<FirstName>Fred</FirstName>
<PlaceOfResidence>United Kingdom</PlaceOfResidence>
<DateOfBirth>16/01/1988</DateOfBirth>
<Active>true</Active>
</TableRow>
<TableRow RowNumber="2" TableName="PersonDetails">
<FirstName>Harold</FirstName>
<PlaceOfResidence>United Kingdom</PlaceOfResidence>
<DateOfBirth>01/01/1960</DateOfBirth>
<Active>true</Active>
</TableRow>
<TableRow RowNumber="3" TableName="PersonDetails">
<FirstName>Mary</FirstName>
<PlaceOfResidence>United States</PlaceOfResidence>
<DateOfBirth>05/05/1955</DateOfBirth>
<Active>true</Active>
</TableRow>
</Table>
<Table>
<TableRow RowNumber="1" TableName="Covers">
<CoverType>Property</CoverType>
<DateAdded>01/06/2017</DateAdded>
</TableRow>
<TableRow RowNumber="2" TableName="Covers">
<CoverType>Motor</CoverType>
<DateAdded>01/06/2017</DateAdded>
</TableRow>
<TableRow RowNumber="3" TableName="Covers">
<CoverType>Liability</CoverType>
<DateAdded>01/06/2017</DateAdded>
</TableRow>
</Table>
<Notes>some notes</Notes>
</data>
我只能使用 XSLT 1.0。
到目前为止我有:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-16"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[(*)]">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="/">
<data>
<xsl:apply-templates select="@* | node()"/>
</data>
</xsl:template>
</xsl:stylesheet>
去除<NewDataSet> 和<GUID> 标签并替换为<data>。
但是我不确定如何生成 2 个表分组,以及如何自动* 识别重复值:ContractName、Contract Number 和 Notes。
*其他重复值可能稍后出现。
任何帮助或指针将不胜感激。
【问题讨论】:
-
那么如果
PlaceOfResidence对表格中的每一行也完全相同,你会想要省略它吗? -
您好,每个表格中都不应重复 PlaceOfResidence。
标签: xml xslt xslt-1.0 grouping