我有这个XML:
<?xml version="1.0" encoding="UTF-8"?>
<ns2:update xmlns:ns2="urn:enterprise.soap.sforce.com">
<ns2:sObjects type="Account">
<ns2:Id>001b0000006mKKqAAM</ns2:Id>
<ns2:Name>NewName</ns2:Name>
</ns2:sObjects>
</ns2:update>
我希望得到这个输出:
<?xml version="1.0" encoding="UTF-8"?>
<ns2:update xmlns:ns2="urn:enterprise.soap.sforce.com">
<ns2:sObjects xsi:type="Account" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns2:Id>001b0000006mKKqAAM</ns2:Id>
<ns2:Name>NewName</ns2:Name>
</ns2:sObjects>
</ns2:update>
我需要使用type="Account"
元素中的命名空间xsi:type="Account"
将属性xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
更改为ns2:sObjects
。
如何使用XSLT执行此操作?
答案 0 :(得分:0)
我摆弄了一下,这就是你要找的东西吗?
<xsl:stylesheet version="1.0" xmlns:ns2="urn:enterprise.soap.sforce.com" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<ns2:update xmlns:ns2="urn:enterprise.soap.sforce.com">
<ns2:sObjects xsi:type="Account" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns2:Id><xsl:value-of select="/ns2:update/ns2:sObjects/ns2:Id"/></ns2:Id>
<ns2:Name><xsl:value-of select="/ns2:update/ns2:sObjects/ns2:Name"/></ns2:Name>
</ns2:sObjects></ns2:update>
</xsl:template>
</xsl:stylesheet>
它更新sObjects的属性并获取子Id
和Name
个节点
输出(使用您的输入)
<?xml version="1.0" encoding="UTF-8"?>
<ns2:update xmlns:ns2="urn:enterprise.soap.sforce.com">
<ns2:sObjects xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Account">
<ns2:Id>001b0000006mKKqAAM</ns2:Id>
<ns2:Name>NewName</ns2:Name>
</ns2:sObjects>
</ns2:update>
答案 1 :(得分:0)
将以下模板添加到身份转换中:
<xsl:template match="@type[. = 'Account']">
<xsl:attribute name="xsi:type"
namespace="http://www.w3.org/2001/XMLSchema-instance">
<xsl:value-of select="'Account'"/>
</xsl:attribute>
</xsl:template>
如果术语&#34;身份转换&#34;没有对你说什么,网络搜索引擎应该有所帮助。
答案 2 :(得分:0)
实现这一目标的非常简单的XSLT样式表将是
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns2="urn:enterprise.soap.sforce.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:output method="xml" />
<!-- Identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<!-- replaces the ns2:sObjects node with the replacement -->
<xsl:template match="ns2:sObjects">
<ns2:sObjects xsi:type="{@type}">
<xsl:apply-templates />
</ns2:sObjects>
</xsl:template>
</xsl:stylesheet>
它的输出是
<?xml version="1.0"?>
<ns2:update xmlns:ns2="urn:enterprise.soap.sforce.com">
<ns2:sObjects xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Account">
<ns2:Id>001b0000006mKKqAAM</ns2:Id>
<ns2:Name>NewName</ns2:Name>
</ns2:sObjects>
</ns2:update>