【发布时间】:2017-05-21 08:53:17
【问题描述】:
我搜索过,发现变量在 XSLT 中是不可变的(常量)。
我有两个问题。
给出了示例输入 xml。
<employees>
<!-- Block1 -->
<employee>
<id>123</id>
<name>steve</name>
<work>developer</work>
</employee>
<employee>
<id>444</id>
<name>mark</name>
<work>developer</work>
</employee>
<employee>
<id>444</id>
<name>alex</name>
<work>tester</work>
</employee>
<employee>
<id>555</id>
<name>john</name>
<work>architect</work>
</employee>
<!-- Block 2-->
<projects>
<project>
<pid>p2</pid>
<roles>
<role>developer</role>
<role>tester</role>
</roles>
<total>30</total>
</project>
<project>
<pid>p4</pid>
<roles>
<role>tester</role>
</roles>
<total>3</total>
</project>
<project>
<pid>p3</pid>
<roles>
<role>architect</role>
</roles>
<total>2</total>
</project>
</projects>
</employees>
输出:
场景(问题):2
部分:
<Projects>
<pid>p2</pid>
<employees>
<empName>steve</empName>
<empName>mark</empName>
<empName>alex</empName>
</employees>
</Projects>
Not Part of :
<Projects>
<pid>p2</pid>
<employees-exclude>
<empName>john</empName>
</employees-exclude>
</Projects>
场景(问题):3
<Projects>
<pid>p2</pid>
<empList>
<emp>
<resource>1</resource>
<!-- like GUID , unique, increment starts from '1'-->
<empName>steve</empName>
</emp>
<emp>
<resource>2</resource>
<!-- like GUID , unique-->
<empName>mark</empName>
</emp>
<emp>
<resource>3</resource>
<!-- like GUID , unique-->
<empName>alex</empName>
</emp>
</empList>
</Projects>
问题:
- 我可以创建一个维护所有员工详细信息的地图吗? (键是“工作”,值是 id+name 的列表),这可能吗? 输出:我想根据项目 id 准备 emp 列表。有一个逻辑。所以,我得提前准备一份清单。
对于给定的项目 id (pid),我想根据角色 (Block2) 获取所有基于工作(来自 Block1)选择的员工,哪些员工不属于其中?输入将是 输出:
计算匹配的条目数?我们有'position()',它告诉for循环中的当前迭代。但我只想要匹配的块。 例如,如果有 3 个雇员匹配出 6 个。我需要附加值,例如资源 + 唯一 ID。唯一 ID 从 '1' 开始。 输出:
非常感谢您的帮助和支持。
【问题讨论】:
-
您的问题并不完全清楚。查看转换给定示例的预期结果会很有帮助。通常,您可以使用 key 从项目(或角色)的上下文中获取符合条件的员工。我不确定你所说的“不属于它”是什么意思。
-
@Michel,我编辑了我的问题,添加了预期的输出。非常感谢,
-
“输入”(
p2)从何而来?为什么alex被排除在场景 3 的结果之外? -
输入来自 pid 元素,这是我的要求,根据某些条件我必须选择“p2”。是的,亚历克斯应该在 Scenrio3 中。我编辑了它。谢谢。
-
"基于某些条件,我必须选择 'p2'。" 恐怕这并不能告诉我任何事情。您说的是“给定项目 id”,但您的输入中没有“给定”项目 id:所有项目都是平等给出的。
标签: dictionary xslt-1.0 counter