[英]copy one complete element to a new XML when match the value of an attribute, and changing the value of another attribute inside, using XSLT
[英]XSLT copy element to another according to attribute value
我需要根据同一元素中另一个节点中的属性复制一个节点。 示例输入 XML 如下:
<?xml version="1.0"?>
<Company>
<Department id="Marketing">
<depName>Marketing</depName>
<position>Marketer</position>
</Department>
<Employee id="e1" level="l1">
<First>John</First>
<Dep code="Marketing"></Dep>
</Employee>
<Employee id="e2" level="l1">
<First>Jane</First>
<Dep code="Marketing"></Dep>
</Employee>
<Boss id="e3" level="l2">
<First>Ben</First>
<Dep code="Marketing"></Dep>
</Boss>
</Company>
output XML 应如下所示:
<?xml version="1.0"?>
<Company>
<Department id="Marketing">
<depName>Marketing</depName>
<position>Marketer</position>
</Department>
<Employee id="e1" level="l1">
<First>John</First>
<Dep code="Marketing"></Dep>
<position>Marketer</position>
</Employee>
<Employee id="e2" level="l1">
<First>Jane</First>
<Dep code="Marketing"></Dep>
<position>Marketer</position>
</Employee>
<Boss id="e3" level="l2">
<First>Ben</First>
<Dep code="Marketing"></Dep>
</Boss>
</Company>
当然可以有更多的员工和部门。 我需要将 position 元素从 Department 复制到该部门的每个员工(例如,对于 Marketing 有<Dep code="Marketing">
),而不是 Bosses 。 可以使用其id
属性或depName
元素检查部门,它们应该相同。
我是 XSLT 的新手,所以只需了解如何使用 select 元素,但不知道如何使用 go 从这里开始(复制到正确的位置):
<xsl:template match="Department">
<xsl:copy>
<xsl:copy-of select="position"/>
</xsl:copy>
</xsl:template>
编辑:为员工添加了属性,他们需要保留在 output
声明一个密钥
<xsl:key name="dep" match="Department" use="@id"/>
然后为Employee
编写模板
<xsl:template match="Employee">
<xsl:copy>
<xsl:copy-of select="@*, node(), key('dep', Dep/@code)/position"/>
</xsl:copy>
</xsl:template>
逗号运算,
适用于 XSLT 2 或 3 个处理器,对于 XSLT 1 处理器使用两个单独的
<xsl:copy-of select="@* | node()"/>
<xsl:copy-of select="key('dep', Dep/@code)/position"/>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.