将数据从一个xml文件复制到另一个xml文件

时间:2012-10-10 06:16:46

标签: xml xslt

我有一个source.xml文件

<?xml version="1.0" encoding="utf-8" ?>
<Studentdatabase>
    <Student>
        <id>0001</id>
        <Fname>SOMEX</Fname>
        <Mname>Y</Mname>
        <Lname>Z</Lname>
        <DOB>1992-05-26T00:00:00+05:30</DOB>
        <fathersname>XYZ</fathersname>
        <cls>I</cls>
        <gen>M</gen>
        <add>kadapa</add>
    </Student>
    <Student>
        <id>0002</id>
        <Fname>SOMEA</Fname>
        <Mname>B</Mname>
        <Lname>C</Lname>
        <DOB>1991-04-6T00:00:00+05:30</DOB>
        <fathersname>ABC</fathersname>
        <cls>II</cls>
        <gen>F</gen>
        <add>PUNE</add>
    </Student>
    <Student>
        <id>0003</id>
        <Fname>SOMED</Fname>
        <Mname>E</Mname>
        <Lname>F</Lname>
        <DOB>1990-08-2T00:00:00+05:30</DOB>
        <fathersname>DEF</fathersname>
        <cls>III</cls>
        <gen>M</gen>
        <add>JMD</add>
    </Student>
</Studentdatabase>

和destination.xml文件

<?xml version="1.0" standalone="yes"?>
<MyDB>
  <tableName>
    <studentid>1</studentid>
    <Firstname>chaithanya</Firstname>
    <middlename>babu</middlename>
    <lastname>satyala</lastname>
    <Dateofbirth>1991-05-26T00:00:00+05:30</Dateofbirth>
    <fathersname>babu</fathersname>
    <class>I</class>
    <gender>M</gender>
    <address>kadapa</address>
  </tableName>
  <tableName>
    <studentid>2</studentid>
    <Firstname>charan</Firstname>
    <middlename>kumar</middlename>
    <lastname>palla</lastname>
    <Dateofbirth>1990-10-05T00:00:00+05:30</Dateofbirth>
    <fathersname>krishnaiah</fathersname>
    <class>I</class>
    <gender>M</gender>
    <address>hyderabad</address>
  </tableName>
  <tableName>
    <studentid>3</studentid>
    <Firstname>kondaiah</Firstname>
    <middlename />
    <lastname>dasari</lastname>
    <Dateofbirth>1985-06-05T00:00:00+05:30</Dateofbirth>
    <fathersname>dasari</fathersname>
    <class>II</class>
    <gender>M</gender>
    <address>porumamilla</address>
  </tableName>
  <tableName>
    <studentid>4</studentid>
    <Firstname>dheeraj</Firstname>
    <middlename>reddy</middlename>
    <lastname>polimera</lastname>
    <Dateofbirth>1991-05-16T00:00:00+05:30</Dateofbirth>
    <fathersname>krishna reddy</fathersname>
    <class>II</class>
    <gender>M</gender>
    <address>pulivendula</address>
  </tableName>
  <tableName>
    <studentid>5</studentid>
    <Firstname>shabaz</Firstname>
    <middlename>banu</middlename>
    <lastname>noormohammad</lastname>
    <Dateofbirth>1991-06-16T00:00:00+05:30</Dateofbirth>
    <fathersname>noor ahmed</fathersname>
    <class>III</class>
    <gender>F</gender>
    <address>jmd</address>
  </tableName>
  <tableName>
    <studentid>6</studentid>
    <Firstname>khairuna</Firstname>
    <middlename>begum</middlename>
    <lastname>taticherla</lastname>
    <Dateofbirth>2002-02-02T00:00:00+05:30</Dateofbirth>
    <fathersname>kullay</fathersname>
    <class>III</class>
    <gender>F</gender>
    <address>gugudu</address>
  </tableName>
  <tableName>
    <studentid>7</studentid>
    <Firstname>chandrakala</Firstname>
    <middlename />
    <lastname>kummera</lastname>
    <Dateofbirth>1991-06-03T00:00:00+05:30</Dateofbirth>
    <fathersname>lingreddy</fathersname>
    <class>IV</class>
    <gender>F</gender>
    <address>anantapur</address>
  </tableName>
</MyDB>

现在问题是我需要通过引用目标文件更改元素和标记的名称来将源文件中的数据插入到目标文件中...即,例如源文件中的<Fname>必须在目标文件中更改为<FirstName>

任何人都可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您可能希望从阅读XSLT Identity Transform开始。这只会按原样复制所有元素

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

在您的情况下,看起来只有 fathersname 元素不变。然后,您需要编写模板以匹配您想要更改的元素,并在其位置创建新元素。例如,要将学生数据库重命名为 MyDB ,您需要执行以下操作:

<xsl:template match="Studentdatabase">
   <MyDB>
     <xsl:apply-templates select="@*|node()"/>
   </MyDB>
</xsl:template>

要将学生更改为 tableName ,您可以执行以下操作:

<xsl:template match="Student">
   <tableName>
     <xsl:apply-templates select="@*|node()"/>
   </tableName>
</xsl:template>

如果对要重命名的所有元素重复此操作,则应该能够获得预期的输出。