【发布时间】:2021-09-30 11:47:22
【问题描述】:
我有一个可能包含多个就业信息节点的 XML。我需要选择具有子字段 assignment_class 为“GA”的那个。其他的就业信息节点应该被丢弃。 另外,如果employment_information节点只有一个,那么就直接通过吧。
输入 XML:
<?xml version="1.0" encoding="utf-8"?>
<queryCompoundEmployeeResponse>
<CompoundEmployee>
<Person>
<StartDate>2012-02-01</StartDate>
<EndDate>2019-02-28</EndDate>
<action>NO CHANGE</action>
<employment_information>
<action>NO CHANGE</action>
<assignment_class>ST</assignment_class>
</employment_information>
<employment_information>
<action>NO CHANGE</action>
<assignment_class>GA</assignment_class>
</employment_information>
</Person>
</CompoundEmployee>
</queryCompoundEmployeeResponse>
预期输出:
<?xml version="1.0" encoding="UTF-8"?>
<queryCompoundEmployeeResponse>
<CompoundEmployee>
<Person>
<StartDate>2012-02-01</StartDate>
<EndDate>2019-02-28</EndDate>
<action>NO CHANGE</action>
<employment_information>
<action>NO CHANGE</action>
<assignment_class>GA</assignment_class>
</employment_information>
</Person>
</CompoundEmployee>
</queryCompoundEmployeeResponse>
在参考了一些在线帖子后,我可以使用下面的 XSLT 部分实现这一点:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//Person/employment_information[assignment_class!='GA']"/>
</xsl:stylesheet>
但我需要增强此 XSLT 以最终具有以下逻辑:
- 统计就业信息
- 如果 Count 大于 1,则选择 assignment_class 为“GA”的就业信息以及输入中的其他节点。
- 否则(即,如果计数为 0 或 1)按原样复制输入到输出。
感谢任何帮助。谢谢!
【问题讨论】: