我想获取operators.xml中关键字段的值,然后将其值与roles.xml中的开始/结束范围进行比较,然后添加角色元素并指定适当的值。
键107落在1到499的范围内,这是用户开始和结束之间。因此ID被分配给用户角色。角色的名称,即用户或经理,可以是硬编码的。
这是一个说明我的问题的例子。我想很多人可以使用这个问题来获得类似功能的参考。
roles.xml
<OperatorRange>
<Role>
<node_id>1</node_id>
<user_start>1</user_start>
<user_end>499</user_end>
<manager_start>500</manager_start>
<manager_end>699</manager_end>
<training_start>700</training_start>
<training_end>799</training_end>
</Role>
<Role>
<node_id>2</node_id>
<user_start>0</user_start>
<user_end>0</user_end>
<manager_start>0</manager_start>
<manager_end>0</manager_end>
<training_start>0</training_start>
<training_end>0</training_end>
</Role>
</OperatorRange>
operators.xml
<Operators>
<Opeartor>
<key>107</key>
<name>John Smith</name>
</Opeartor>
<Opeartor>
<key>607</key>
<name>Brad Johnson</name>
</Opeartor>
</Operators>
预期结果
<Operators>
<Opeartor>
<key>107</key>
<name>John Smith</name>
<role>user</role>
</Opeartor>
<Opeartor>
<key>607</key>
<name>Brad Johnson</name>
<role>manager</role>
</Opeartor>
</Operators>
答案 0 :(得分:0)
我假设你的xml是这样的,因为你的“roles.xml”有一些错误:
<?xml version="1.0" encoding="UTF-8"?>
<OperatorRange>
<Role>
<node_id>1</node_id>
<user_start>1</user_start>
<user_end>499</user_end>
<manager_start>500</manager_start>
<manager_end>699</manager_end>
<training_start>700</training_start>
<training_end>799</training_end>
</Role>
<Role>
<node_id>2</node_id>
<user_start>1</user_start>
<user_start>499</user_start>
<manager_start>500</manager_start>
<manager_end>699</manager_end>
<training_start>700</training_start>
<training_end>799</training_end>
</Role>
</OperatorRange>
您没有为输出xml的“角色”节点提供任何逻辑。因此,这留给你。试试这个xslt:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:MyUtils="pda:MyUtils">
<xsl:template match="/">
<Operators>
<xsl:variable name="operators" select="Operators//Opeartor"/>
<xsl:variable name="roles" select="MyUtils:getSecondXMLData()"/>
<xsl:for-each select="$operators">
<xsl:variable name="curnode" select="position()"/>
<xsl:for-each select="$roles/Role">
<xsl:if test="$curnode=node_id and $operators[$curnode]/key <=user_end and $operators[$curnode]/key >=user_start">
<Opeartor>
<key>
<xsl:value-of select="$operators[$curnode]/key"/>
</key>
<name>
<xsl:value-of select="$operators[$curnode]/name"/>
</name>
<role></role>
</Opeartor>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</Operators>
</xsl:template>
</xsl:stylesheet>
希望有所帮助。