Dictionary XSLT1.0:计算匹配块的数量并创建映射
我已经搜索过了,发现变量在XSLT中是不可变的(常量)。 我有两个问题。Dictionary XSLT1.0:计算匹配块的数量并创建映射,dictionary,xslt-1.0,counter,Dictionary,Xslt 1.0,Counter,我已经搜索过了,发现变量在XSLT中是不可变的(常量)。 我有两个问题。 给出了示例输入xml <employees> <!-- Block1 --> <employee> <id>123</id> <name>steve</name> <work>developer</work> </employee>
给出了示例输入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>
123
史提夫
开发商
444
做记号
开发商
444
亚历克斯
测试员
555
厕所
建筑师
p2
开发商
测试员
30
p4
测试员
3.
p3
建筑师
2.
输出:
情景(问题):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>
p2
史提夫
做记号
亚历克斯
不属于:
p2
厕所
情景(问题):3
p2
1.
史提夫
2.
做记号
3.
亚历克斯
问题:
非常感谢您的帮助和支持 为了推进这一点,请尝试将此作为起点: XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="emp-by-work" match="employee" use="work" />
<xsl:template match="/employees">
<projects>
<xsl:for-each select="projects/project">
<xsl:variable name="emp-include" select="key('emp-by-work', roles/role)" />
<project>
<xsl:copy-of select="pid"/>
<empList>
<xsl:for-each select="$emp-include">
<emp>
<resource>
<xsl:value-of select="position()"/>
</resource>
<empName>
<xsl:value-of select="name"/>
</empName>
</emp>
</xsl:for-each>
</empList>
</project>
</xsl:for-each>
</projects>
</xsl:template>
</xsl:stylesheet>
这将返回每个项目合格员工的编号列表-类似于您的#3场景:
<?xml version="1.0" encoding="UTF-8"?>
<projects>
<project>
<pid>p2</pid>
<empList>
<emp>
<resource>1</resource>
<empName>steve</empName>
</emp>
<emp>
<resource>2</resource>
<empName>mark</empName>
</emp>
<emp>
<resource>3</resource>
<empName>alex</empName>
</emp>
</empList>
</project>
<project>
<pid>p4</pid>
<empList>
<emp>
<resource>1</resource>
<empName>alex</empName>
</emp>
</empList>
</project>
<project>
<pid>p3</pid>
<empList>
<emp>
<resource>1</resource>
<empName>john</empName>
</emp>
</empList>
</project>
</projects>
p2
1.
史提夫
2.
做记号
3.
亚历克斯
p4
1.
亚历克斯
p3
1.
厕所
要列出被排除的员工,您可以这样做(不幸的是,没有“否定”键):
返回:
<?xml version="1.0" encoding="UTF-8"?>
<projects>
<project>
<pid>p2</pid>
<employees-exclude>
<emp>
<empName>john</empName>
</emp>
</employees-exclude>
</project>
<project>
<pid>p4</pid>
<employees-exclude>
<emp>
<empName>steve</empName>
</emp>
<emp>
<empName>mark</empName>
</emp>
<emp>
<empName>john</empName>
</emp>
</employees-exclude>
</project>
<project>
<pid>p3</pid>
<employees-exclude>
<emp>
<empName>steve</empName>
</emp>
<emp>
<empName>mark</empName>
</emp>
<emp>
<empName>alex</empName>
</emp>
</employees-exclude>
</project>
</projects>
p2
厕所
p4
史提夫
做记号
厕所
p3
史提夫
做记号
亚历克斯
您的问题并不完全清楚。看到转换给定示例的预期结果会很有帮助。通常,您可以使用从项目(或角色)上下文中获取合格员工。我不知道你所说的“不参与”是什么意思。@Michel,我编辑了我的问题,添加了预期输出。非常感谢,“输入”(p2
)来自哪里?为什么在场景3中,alex
被排除在结果之外?输入来自pid元素,这是我的要求,基于某些条件,我必须选择“p2”。是的,亚历克斯应该在第三场。我编辑了它。谢谢。“根据某些条件,我必须选择‘p2’。”恐怕这并不能说明什么。你说的是“给定的项目id”,但你的输入中没有“给定的”项目id:所有的项目都是平等的。非常感谢Michael。@panneer如果你的问题得到了回答,请通过接受答案来结束它。
<xsl:template match="/employees">
<projects>
<xsl:for-each select="projects/project">
<project>
<xsl:copy-of select="pid"/>
<employees-exclude>
<xsl:for-each select="/employees/employee[not(work = current()/roles/role)]">
<emp>
<empName>
<xsl:value-of select="name"/>
</empName>
</emp>
</xsl:for-each>
</employees-exclude>
</project>
</xsl:for-each>
</projects>
</xsl:template>
<?xml version="1.0" encoding="UTF-8"?>
<projects>
<project>
<pid>p2</pid>
<employees-exclude>
<emp>
<empName>john</empName>
</emp>
</employees-exclude>
</project>
<project>
<pid>p4</pid>
<employees-exclude>
<emp>
<empName>steve</empName>
</emp>
<emp>
<empName>mark</empName>
</emp>
<emp>
<empName>john</empName>
</emp>
</employees-exclude>
</project>
<project>
<pid>p3</pid>
<employees-exclude>
<emp>
<empName>steve</empName>
</emp>
<emp>
<empName>mark</empName>
</emp>
<emp>
<empName>alex</empName>
</emp>
</employees-exclude>
</project>
</projects>