我需要xslt进行转换,My Xml如下所示
<OrderReferences>
<OrderRef>
<OrderRef>OrderRef1</OrderRef>
<Type>ERP</Type>
</OrderRef>
<OrderRef>
<OrderRef>OrderRef2</OrderRef>
<Type>CUSTOMER</Type>
</OrderRef>
<OrderRef>
<OrderRef>OrderRef3</OrderRef>
<Type>EXT</Type>
</OrderRef>
</OrderReferences>
我的输出应该是
<OrderReference> (OrderReference for ERP should appear here) </OrderReference>
<OrderReferenceCustomer> (CustomerReference for Customer should appear here) </OrderReferenceCustomer>
<OrderReferenceExternal> (ExtReference for EXT should appear here) </OrderReferenceExternal>
如果这是可以实现的,请告诉我。 XSLT 1.0版本更受欢迎,因为我想要.Net。谢谢。
答案 0 :(得分:2)
您需要使用 xsl:element 根据 Type 元素创建新的元素名称。试试这个XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="OrderRef">
<xsl:element name="Erp{substring(Type, 1, 1)}{translate(substring(Type, 2, string-length(Type) - 1), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')}Reference">
<xsl:value-of select="OrderRef" />
</xsl:element>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
当这应用于您的示例XML时,输出以下内容
<OrderReferences>
<ErpErpReference>OrderRef1</ErpErpReference>
<ErpCustomerReference>OrderRef2</ErpCustomerReference>
<ErpExtReference>OrderRef3</ErpExtReference>
</OrderReferences>
这应该处理包含任何值的 Type 元素。
答案 1 :(得分:1)
这个简短而简单的转型:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="OrderRef[Type='ERP']">
<OrderReference><xsl:value-of select="OrderRef"/></OrderReference>
</xsl:template>
<xsl:template match="OrderRef[Type='CUSTOMER']">
<OrderReferenceCustomer><xsl:value-of select="OrderRef"/></OrderReferenceCustomer>
</xsl:template>
<xsl:template match="OrderRef[Type='EXT']">
<OrderReferenceExternal><xsl:value-of select="OrderRef"/></OrderReferenceExternal>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档:
<OrderReferences>
<OrderRef>
<OrderRef>OrderRef1</OrderRef>
<Type>ERP</Type>
</OrderRef>
<OrderRef>
<OrderRef>OrderRef2</OrderRef>
<Type>CUSTOMER</Type>
</OrderRef>
<OrderRef>
<OrderRef>OrderRef3</OrderRef>
<Type>EXT</Type>
</OrderRef>
</OrderReferences>
会产生确切的,正确的结果(与当前接受的答案不同):
<OrderReference>OrderRef1</OrderReference>
<OrderReferenceCustomer>OrderRef2</OrderReferenceCustomer>
<OrderReferenceExternal>OrderRef3</OrderReferenceExternal>