我目前正在使用XSLT从XML文档中提取值并创建新的XML文档。我的部分XSLT如下:
<xsl:element name="urn:sObjects">
<xsl:element name="urn1:type">
<xsl:value-of select="/ProcessData/Create/type"/>
</xsl:element>
<xsl:element name="CreatedDate">
<xsl:value-of select="Create/CreatedDate"/>
</xsl:element>
<xsl:element name="Alert_Code__c">
<xsl:value-of select="Create/AlertCode"/>
</xsl:element>
<xsl:element name="Status__c">
<xsl:value-of select="Create/Status"/>
</xsl:element>
<xsl:element name="Name">
<xsl:value-of select="Create/Name"/>
</xsl:element>
<xsl:element name="Order_Id__c">
<xsl:value-of select="Create/OrderID"/>
</xsl:element>
</xsl:element>
目前,此输出:
<urn:sObjects>
<urn1:type xmlns:urn1="urn:sobject.enterprise.soap.sforce.com">O2C_SAP_Service_Alert__c</urn1:type>
<CreatedDate />
<Alert_Code__c>ZD</Alert_Code__c>
<Status__c>new</Status__c>
<Name />
<Order_Id__c>0000000102</Order_Id__c>
</urn:sObjects>
我希望输出的是:
<urn:sObjects xsi:type="urn1:O2C_Alert__c">
<urn1:type xmlns:urn1="urn:sobject.enterprise.soap.sforce.com">O2C_SAP_Service_Alert__c</urn1:type>
<CreatedDate />
<Alert_Code__c>ZD</Alert_Code__c>
<Status__c>new</Status__c>
<Name />
<Order_Id__c>0000000102</Order_Id__c>
</urn:sObjects>
换句话说,我想将属性xsi:type="urn1:O2C_Alert__c"
添加到此XML消息中。
我怎么能这样做,使用XSLT?
答案 0 :(得分:3)
您无需使用xsl:element
来创建元素。
您可以将其简化为以下内容(确保为xsi
前缀声明了一个名称空间):
<urn:sObjects xsi:type="urn1:O2C_Alert__c">
<urn1:type>
<xsl:value-of select="/ProcessData/Create/type"/>
</urn1:type>
</urn:sObjects>
修改强>
要使属性值动态化,可以使用{}
评估xpath,如下所示:
<urn:sObjects xsi:type="{a/b/c}">
或者,您可以使用:
<urn:sObjects>
<xsl:attribute name="xsi:type">
<xsl:value-of select="a/b/c"/>
</xsl:attribute>
<!-- followed by other attributes, and then by elements -->
</urn:sObjects>
确保在任何子元素之前声明所有xsl:attribute
。