是否可以对嵌套结构(xslt1.0)进行排序



使用Münchian方法在这里通过xpath和这里分组进行了研究,但找不到如何适应我的情况,在'userField[23]'内的'Label'的'fieldValue'上进行排序,在'SysStructure_FIELD[146]'内

这是我的xslt:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:strip-space elements="*" /> 
<xsl:output method="xml" indent="yes" /> 
<xsl:template match="/Root/STRUCTURESet/STRUCTURE/userField[2]/STRUCTURE_Fields/SysStructure_FIELD">
<xsl:copy> 
<xsl:apply-templates select="objectId"/>
<xsl:apply-templates select="userField">
<xsl:sort select="fieldLabel[10]/fieldValue" data-type="text" order="ascending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet> 

所需的输出:没有实现对fieldValue的Labels进行排序。你能帮忙吗?

xml的缩写形式如下('userField(3(',位于'SysStructure_FIELD(3('内(:

<Root version="1-1">
<STRUCTURESet>
<STRUCTURE id="STRUCTURE_0">
<objectId class="STRUCTURE">
<identifier>49</identifier>
<primarySystem>Sys</primarySystem>
<label>Sys_Default_Structure</label>
</objectId>
<userField>
<fieldLabel>Description</fieldLabel>
<fieldValue>Sys Default structure level</fieldValue>
<fieldType>character</fieldType>
</userField>
<userField>
<fieldLabel>Fields</fieldLabel>
<STRUCTURE_Fields>
<SysStructure_FIELD>
<objectId class="SysStructure_FIELD">
<primarySystem>Sys</primarySystem>
</objectId>
<userField>
<fieldLabel>Hide</fieldLabel>
<fieldValue>0</fieldValue>
<fieldType>numeric</fieldType>
</userField>
<userField>
<fieldLabel>Label</fieldLabel>
<fieldValue>System_value</fieldValue>
<fieldType>character</fieldType>
</userField>
<userField>
<fieldLabel>MainReturn</fieldLabel>
<fieldValue/>
<fieldType>character</fieldType>
</userField>
</SysStructure_FIELD>
<SysStructure_FIELD>
<objectId class="SysStructure_FIELD">
<primarySystem>Sys</primarySystem>
</objectId>
<userField>
<fieldLabel>Hide</fieldLabel>
<fieldValue>0</fieldValue>
<fieldType>numeric</fieldType>
</userField>
<userField>
<fieldLabel>Label</fieldLabel>
<fieldValue>Off_Market</fieldValue>
<fieldType>character</fieldType>
</userField>
<userField>
<fieldLabel>MainReturn</fieldLabel>
<fieldValue/>
<fieldType>character</fieldType>
</userField>
</SysStructure_FIELD>
<SysStructure_FIELD>
<objectId class="SysStructure_FIELD">
<primarySystem>Sys</primarySystem>
</objectId>
<userField>
<fieldLabel>Hide</fieldLabel>
<fieldValue>0</fieldValue>
<fieldType>numeric</fieldType>
</userField>
<userField>
<fieldLabel>Label</fieldLabel>
<fieldValue>System_Time</fieldValue>
<fieldType>character</fieldType>
</userField>
<userField>
<fieldLabel>MainReturn</fieldLabel>
<fieldValue/>
<fieldType>character</fieldType>
</userField>
</SysStructure_FIELD>
</STRUCTURE_Fields>
</userField>
<userField>
<fieldLabel>Label</fieldLabel>
<fieldValue>Sys_Default_Structure</fieldValue>
<fieldType>character</fieldType>
</userField>
</STRUCTURE>
</STRUCTURESet>

因为在结构中有两次提到userField,所以您需要指定要检查的字段:userField/fiieldLabel[text((='Label'而不是userField/fieldLabel[10]此外,您需要在与fieldLabel相同的级别上进行排序:/fieldValue正在做这项工作。

所以完整的陈述是:

<xsl:template match="/Root/STRUCTURESet/STRUCTURE/userField[2]/STRUCTURE_Fields"> 
<xsl:copy> 
<xsl:apply-templates select="SysStructure_FIELD"> 
<xsl:sort select="userField/fieldLabel[text()='Label']/../fieldValue" /> 
</xsl:apply-templates>

相关内容

  • 没有找到相关文章

最新更新