如何使用 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/>
我有如下有效载荷:
<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/>