读取 XML 文件并将其用于 XSLT 中的第二个 XML



我想在运算符.xml中获取键字段的值,然后将其值与roles.xml中的开始/结束范围进行比较,然后添加一个角色元素并分配适当的值。

键 107 落在 1- 499 的范围内,这是用户开始和结束之间。因此,ID 将分配给用户角色。角色的名称(即用户或经理)可以硬编码。

这里有一个例子来说明我的问题。我想很多人都可以用这个问题作为参考,实现类似的功能。

角色.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>

运算符.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>

我假设你的xml是这样的,因为你的"角色.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 &lt;=user_end and $operators[$curnode]/key &gt;=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>

希望有帮助。

最新更新