提问人:IntegrationExpert 提问时间:11/18/2022 最后编辑:branceIntegrationExpert 更新时间:11/18/2022 访问量:264
XSLT 1.0 - 向节点更改/添加命名空间
XSLT 1.0 - Change/add namespace to nodes
问:
我目前正在尝试在 SAP PI 中创建 XSLT 1.0 映射以更改/添加特定节点的命名空间。给定输入 .xml,我必须创建一个 XSL 文件来获取输出 .xml,如下所示。不幸的是,到目前为止,我所有的尝试都没有成功。如果有人能提供 XSL 表来解决这个问题,我会很高兴。如果有人能帮助我,我会很高兴,因为我已经非常接近绝望了。
输入.XML
<?xml version="1.0" encoding="UTF-8"?>
<ns0:serviceABC xmlns:ns0="http://namespaceToReplace">
<XYZ>
<Zugang>
<MandantCode>test</MandantCode>
<BenutzerId>test</BenutzerId>
<Password>test</Password>
</Zugang>
<Personen>
<GpCode>0000000001</GpCode>
<Name>Name1</Name>
<LandCode>DE</LandCode>
</Personen>
<Personen>
<GpCode>0000000002</GpCode>
<Name>Name2</Name>
<LandCode>DE</LandCode>
</Personen>
<Personen>
<GpCode>0000000003</GpCode>
<Name>Name3</Name>
<LandCode>DE</LandCode>
</Personen>
<Personen>
<GpCode>0000000004</GpCode>
<Name>Name4</Name>
<LandCode>DE</LandCode>
</Personen>
</XYZ>
</ns0:serviceABC>
输出.XML (“ns0:” - 需要删除前缀,必须在节点服务 ABC 中替换 “xmlns=”http://newNamespace1“”,必须将“xmlns=”http://newNamespace2“” 添加到节点 XYZ):
<?xml version="1.0" encoding="UTF-8"?>
<serviceABC xmlns="http://newNamespace1">
<XYZ xmlns="http://newNamespace2">
<Zugang>
<MandantCode>test</MandantCode>
<BenutzerId>test</BenutzerId>
<Password>test</Password>
</Zugang>
<Personen>
<GpCode>0000000001</GpCode>
<Name>Name1</Name>
<LandCode>DE</LandCode>
</Personen>
<Personen>
<GpCode>0000000002</GpCode>
<Name>Name2</Name>
<LandCode>DE</LandCode>
</Personen>
<Personen>
<GpCode>0000000003</GpCode>
<Name>Name3</Name>
<LandCode>DE</LandCode>
</Personen>
<Personen>
<GpCode>0000000004</GpCode>
<Name>Name4</Name>
<LandCode>DE</LandCode>
</Personen>
</XYZ>
</serviceABC>
我期待着你们的来信。
开发的源代码根本不起作用
答:
0赞
michael.hor257k
11/18/2022
#1
“xmlns=”http://newNamespace2“” 必须添加到节点 XYZ):
我不认为你了解你的任务的性质。这不是向单个节点添加命名空间声明的问题。
在输出中,元素及其所有后代都已移动到新命名空间中。这意味着它们都必须重命名(根元素也是如此):XYZ
ns0:serviceABC
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns0="http://namespaceToReplace"
exclude-result-prefixes="ns0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/ns0:serviceABC">
<serviceABC xmlns="http://newNamespace1">
<xsl:apply-templates/>
</serviceABC>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="http://newNamespace2">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
上一个:JSON 中的命名空间
下一个:固有命名空间 XSLT 问题
评论