3

我有一个 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 值并将其插入到 <> 中,例如:

<Field FieldName="Doc_ID">1</Field>

<Doc_Id>1345</Doc_Id>

真的很感激你的帮助。

史蒂文

4

1 回答 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="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(属性值模板)。

于 2012-06-29T05:11:03.570 回答