XSLT转换

时间:2012-06-29 05:00:53

标签: xml xslt transformation

我有一个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>

真的会帮助你。

史蒂芬

1 个答案:

答案 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(属性值模板)。