通过XSLT在XML数据之上添加新元素

时间:2014-10-13 11:08:39

标签: xml xslt

我是XML和XSLT的新手,所以我需要一些帮助。我有这种XML:

<Catalogue>
     <App id="1">
         <Car>BMW</Car>
         <BodyType>Sedan</BodyType>
         <PartType>Wiper</PartType>
         <PartNumber>1234</PartNumber>
     </App>
     <App id="2">
         <Car>Dodge</Car>
         <DriveType>FWD</DriveType>
         <PartType>Wiper</PartType>
         <PartNumber>5678</PartNumber>
     </App>
     <App id="3">
         <Car>Chevrolet</Car>
         <EngineVIN>G</EngineVIN>
         <PartType>Wiper</PartType>
         <PartNumber>9012</PartNumber>
     </App>
     <App id="4">
         <Car>VW</Car>
         <PartType>Wiper</PartType>
         <PartNumber>3456</PartNumber>
     </App>
</Catalogue>

我无法弄清楚如何编写一个XSLT来添加id = 0的顶级App,所以它看起来像这样:

<Catalogue>
     <App id="0">
         <Car></Car>
         <BodyType></BodyType>
         <DriveType></DriveType>
         <EngineVIN></EngineVIN>
         <PartType></PartType>
         <PartNumber></PartNumber>
     </App>
     <App id="1">
         <Car>BMW</Car>
         <BodyType>Sedan</BodyType>
         <PartType>Wiper</PartType>
         <PartNumber>1234</PartNumber>
     </App>
     <App id="2">
         <Car>Dodge</Car>
         <DriveType>FWD</DriveType>
         <PartType>Wiper</PartType>
         <PartNumber>5678</PartNumber>
     </App>
     <App id="3">
         <Car>Chevrolet</Car>
         <EngineVIN>G</EngineVIN>
         <PartType>Wiper</PartType>
         <PartNumber>9012</PartNumber>
     </App>
     <App id="4">
         <Car>VW</Car>
         <PartType>Wiper</PartType>
         <PartNumber>3456</PartNumber>
     </App>
</Catalogue>

我现在尝试几天没有运气,所以任何帮助都会受到赞赏。我需要这个,因为当我想将这个XML导入Access时,出于某种原因,如果在第一个“App”中没有定义所有字段(发生在其他“App”-s中),它们就不会被导入。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您对一组固定的标签感到满意,可以很容易地在XSLT 1.0中完成,如下所示:

<xsl:template match="/Catalogue">
  <Catalogue>

    <App id="0">
      <Car></Car>
      <BodyType></BodyType>
      <DriveType></DriveType>
      <EngineVIN></EngineVIN>
      <PartType></PartType>
      <PartNumber></PartNumber>
    </App>

    <xsl:copy-of select="App"/>

  </Catalogue>
</xsl:template>

请注意,我为<App>添加了结束标记。这些文件在XML文件中缺失。