如何使用 XSLT 在 XML 中使用 Param 将命名空间设置为我的根节点

how to set namespace using a Param to my root node in XML using XSLT

我有如下有效载荷:

<queryCompoundEmployeeResponse>
<CompoundEmployee>
    <name>tester</name>
    <person_id_external>12345</person_id_external>
</CompoundEmployee>
</queryCompoundEmployeeResponse>

我想添加一个命名空间,比如 "myNamespace/2019-10"。

预期输出:

<?xml version="1.0" encoding="UTF-8"?>
<queryCompoundEmployeeResponse xmlns="myNamespace/2019-10">
<CompoundEmployee>
<name>tester</name>
<person_id_external>12345</person_id_external>
</CompoundEmployee>
</queryCompoundEmployeeResponse>

下面是我尝试使用参数的 XSL - param1

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:hci="http://sap.com/it/"
    exclude-result-prefixes="hci">

    <xsl:param name="param1"/>

    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="*" priority="1">
        <xsl:element name="{local-name()}" namespace="$param1">
            <xsl:apply-templates select="@*|node()"/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

使用 param1 xsl:param 设置命名空间的方法正确吗? 不对的地方请指正

请添加值 <xsl:param name="param1" select="'myNamespace/2019-10'"/> 而不是 <xsl:param name="param1"/>

代码是:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:hci="http://sap.com/it/"
    exclude-result-prefixes="hci">

    <xsl:param name="param1" select="'myNamespace/2019-10'"/>

    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="*" priority="1">
        <xsl:element name="{local-name()}" namespace="{$param1}">
            <xsl:apply-templates select="@*|node()"/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

Can you suggest me what piece of code is redundant. I can remove it.

您需要处理给定的 XML 是:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:param name="param1"/>

<xsl:template match="*">
    <xsl:element name="{name()}" namespace="{$param1}">
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template>

</xsl:stylesheet>

如果您希望输入也有属性,请添加:

<xsl:copy-of select="@*"/>

之前:

<xsl:apply-templates/>