我有一个XML文件:
<?xml version="1.0" encoding="utf-8"?>
<Batch BatchID="896" BatchName="20120629.130504">
<Document DocumentType="XML Question">
<Fields>
<Field FieldName="Doc_ID">1</Field>
<Field FieldName="Vendor_Code">126400</Field>
<Field FieldName="Property_Code">10519</Field>
<Field FieldName="Invoice_Num">20509</Field>
</Fields><Files />
</Document>
</Batch>
我希望使用XSLT文件将其转换为类似下面的内容:
<?xml version="1.0" standalone="yes"?>
<ABCRelease>
<ABC>
<Doc_Id>1345</Doc_Id>
<Vendor_Code>134500</Vendor_Code>
<Property_Code>105559</Property_Code>
<Invoice_Num>2034539</Invoice_Num>
</ABC>
</ABCRelease>
我第一次使用XML时,我花了很多时间没有达到目前的状态,并且已经对该主题进行了大量搜索。是否有人能够帮助我并提供一些可以启用此功能的示例代码?
我的问题是提取FieldName值并将其插入&lt;&gt;例如来自:
<Field FieldName="Doc_ID">1</Field>
到
<Doc_Id>1345</Doc_Id>
真的会帮助你。
史蒂芬
答案 0 :(得分: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="Fields">
<ABCRelease>
<ABC>
<xsl:apply-templates/>
</ABC>
</ABCRelease>
</xsl:template>
<xsl:template match="Field">
<xsl:element name="{@FieldName}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档时:
<Batch BatchID="896" BatchName="20120629.130504">
<Document DocumentType="XML Question">
<Fields>
<Field FieldName="Doc_ID">1</Field>
<Field FieldName="Vendor_Code">126400</Field>
<Field FieldName="Property_Code">10519</Field>
<Field FieldName="Invoice_Num">20509</Field>
</Fields>
<Files />
</Document>
</Batch>
会产生想要的正确结果:
<ABCRelease>
<ABC>
<Doc_ID>1</Doc_ID>
<Vendor_Code>126400</Vendor_Code>
<Property_Code>10519</Property_Code>
<Invoice_Num>20509</Invoice_Num>
</ABC>
</ABCRelease>
<强>解释强>:
正确使用 <xsl:element>
和AVT(属性值模板)。