XSLT - 添加一个 XML 节点作为 header

XSLT - Add a XML node as header

在我的流程中,我收到了一个 XML objects 的列表,如下例所示:

<shop>..data..</shop>
<shop>..data..</shop>
<shop>..data..</shop>
<shop>..data..</shop>

我想添加一个 header/node 这样的:

<shops "xmlns": "http://www.demo.com","shops-id": "static-value">
    <shop>..data..</shop>
    <shop>..data..</shop>
    <shop>..data..</shop>
    <shop>..data..</shop>
</shops>

可以用 XSLT 添加吗?

很大程度上取决于上下文,但是一种方法是创建一个模板来匹配任何列表中第一次出现的 shop,如下所示:

<xsl:template match="shop[1]">
  <shops>
    <xsl:copy-of select=". | following-sibling::shop"/>
  </shops>
</xsl:template>

(我没有添加属性,因为您的示例输出无效 XML)

然后添加第二个模板来匹配剩余的 shop 元素并丢弃它们,如下所示:

<xsl:template match="shop"/>

可能有更有效的方法,具体取决于您要执行的操作,但此方法将在包含任何 shop 元素的任何元素中创建一个新的 shops 元素。