请找到2个XML
输入XML-
<feed xmlns:es="http://ucmservice">
<element>
<es:RepositoryDetails>
<es:Repository Type="DatabaseRepository" />
<es:ConnetionDetails>
<es:Param MigrationSetId="439" />
</es:ConnetionDetails>
</es:RepositoryDetails>
<es:DocProperties>
<es:UniqueDocId Value="_1_15">
<es:DocProperty propertyName="EmployeeName">
<es:PropValues>
<es:PropValue>Index</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="EmployeeAddress">" +
<es:PropValues>
<es:PropValue>Gurgaon</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="Salary">
<es:PropValues>
<es:PropValue>15000</es:PropValue>
</es:PropValues>
</es:DocProperty>
</es:UniqueDocId>
</es:DocProperties>
</element>
<element>
<es:RepositoryDetails>
<es:Repository Type="DatabaseRepository" />
<es:ConnetionDetails>
<es:Param MigrationSetId="439" />
</es:ConnetionDetails>
</es:RepositoryDetails>
<es:DocProperties>
<es:UniqueDocId Value="_1_15">
<es:DocProperty propertyName="EmployeeName">
<es:PropValues>
<es:PropValue>Index1</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="EmployeeAddress">" +
<es:PropValues>
<es:PropValue>Delhi</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="Salary">
<es:PropValues>
<es:PropValue>25000</es:PropValue>
</es:PropValues>
</es:DocProperty>
</es:UniqueDocId>
</es:DocProperties>
</element>
<element>
<es:RepositoryDetails>
<es:Repository Type="Trim" />
<es:ConnetionDetails>
<es:Param MigrationSetId="439" />
</es:ConnetionDetails>
</es:RepositoryDetails>
<es:DocProperties>
<es:UniqueDocId Value="_1_15">
<es:DocProperty propertyName="EmployeeName">
<es:PropValues>
<es:PropValue>Quality</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="EmployeeAddress">" +
<es:PropValues>
<es:PropValue>Mumbai</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="Salary">
<es:PropValues>
<es:PropValue>20000</es:PropValue>
</es:PropValues>
</es:DocProperty>
</es:UniqueDocId>
</es:DocProperties>
</element>
<element>
<es:RepositoryDetails>
<es:Repository Type="DatabaseRepository" />
<es:ConnetionDetails>
<es:Param MigrationSetId="439" />
</es:ConnetionDetails>
</es:RepositoryDetails>
<es:DocProperties>
<es:UniqueDocId Value="_1_15">
<es:DocProperty propertyName="EmployeeName">
<es:PropValues>
<es:PropValue>Index</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="EmployeeAddress">" +
<es:PropValues>
<es:PropValue>Gurgaon</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="Salary">
<es:PropValues>
<es:PropValue>21000</es:PropValue>
</es:PropValues>
</es:DocProperty>
</es:UniqueDocId>
</es:DocProperties>
</element>
<element>
<es:RepositoryDetails>
<es:Repository Type="Trim" />
<es:ConnetionDetails>
<es:Param MigrationSetId="439" />
</es:ConnetionDetails>
</es:RepositoryDetails>
<es:DocProperties>
<es:UniqueDocId Value="_1_15">
<es:DocProperty propertyName="EmployeeName">
<es:PropValues>
<es:PropValue>Index1</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="EmployeeAddress">" +
<es:PropValues>
<es:PropValue>Gurgaon</es:PropValue>
</es:PropValues>
</es:DocProperty>
<es:DocProperty propertyName="Salary">
<es:PropValues>
<es:PropValue>15000</es:PropValue>
</es:PropValues>
</es:DocProperty>
</es:UniqueDocId>
</es:DocProperties>
</element></feed>必需的输出XML-
<tree>
<item level="0" name="DatabaseRepository">
<item level="1" name="Index">
<item level="2" name="Gurgaon"/>
<item level="2" name="Mumbai"/>
</item>
<item level="1" name="Index1">
<item level="2" name="Delhi"/>
</item>
</item>
<item level="0" name="Trim">
<item level="1" name="Quality">
<item level="0" name="Mumbai"/>
<item level="1" name="Index1">
<item level="0" name="Gurgaon"/>
</item>
</item>
</tree>我不知道如何实现它。我在XSL和Javascript中尝试了一些东西,但它们还不够。
发布于 2010-07-21 22:54:19
XSLT是关于树的,而不是标签。如果您的输出方法不是text,则不能生成格式不正确的树。这就是一个特性!
我敢肯定,使用适当XSLT可以生成您想要的输出。您需要发布一个输入样本和所需的输出。
:另外,为了帮助你,你必须还原这句话:
“我只想在关节后条件为真时关闭节点”
For:如果某个特定条件为真,我想添加一些模板
EDIT 2:现在有了输入和输出,看起来你想要按两个键分组。所以,这个样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:es="http://ucmservice" exclude-result-prefixes="es">
<xsl:key name="ByType" match="element" use="es:RepositoryDetails/es:Repository/@Type"/>
<xsl:key name="ByType-Name" match="es:UniqueDocId" use="concat(../../es:RepositoryDetails/es:Repository/@Type,'++',es:DocProperty[@propertyName='EmployeeName']/es:PropValues/es:PropValue)"/>
<xsl:template match="text()"/>
<xsl:template match="feed">
<tree>
<xsl:apply-templates/>
</tree>
</xsl:template>
<xsl:template match="element"/>
<xsl:template match="element[count(.|key('ByType',es:RepositoryDetails/es:Repository/@Type)[1])=1]">
<item level="0" name="{es:RepositoryDetails/es:Repository/@Type}">
<xsl:apply-templates select="key('ByType',es:RepositoryDetails/es:Repository/@Type)/*"/>
</item>
</xsl:template>
<xsl:template match="es:UniqueDocId"/>
<xsl:template match="es:UniqueDocId[count(.|key('ByType-Name',concat(../../es:RepositoryDetails/es:Repository/@Type,'++',es:DocProperty[@propertyName='EmployeeName']/es:PropValues/es:PropValue))[1])=1]">
<item level="1" name="{es:DocProperty[@propertyName='EmployeeName']/es:PropValues/es:PropValue}">
<xsl:apply-templates select="key('ByType-Name',concat(../../es:RepositoryDetails/es:Repository/@Type,'++',es:DocProperty[@propertyName='EmployeeName']/es:PropValues/es:PropValue))/*"/>
</item>
</xsl:template>
<xsl:template match="es:DocProperty[@propertyName='EmployeeAddress']/es:PropValues/es:PropValue">
<item level="2" name="{.}" />
</xsl:template>
</xsl:stylesheet>输出:
<tree>
<item level="0" name="DatabaseRepository">
<item level="1" name="Index">
<item level="2" name="Gurgaon" />
<item level="2" name="Gurgaon" />
</item>
<item level="1" name="Index1">
<item level="2" name="Delhi" />
</item>
</item>
<item level="0" name="Trim">
<item level="1" name="Quality">
<item level="2" name="Mumbai" />
</item>
<item level="1" name="Index1">
<item level="2" name="Gurgaon" />
</item>
</item>
</tree>注释:你想要的输出有一些错误(没有数据库仓库-索引-孟买),所以我不知道你是否真的想让item@name='Trim‘孙辈在编写时带有@Leve2或0。
https://stackoverflow.com/questions/3300147
复制相似问题