繁体   English   中英

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM