使用XSLT 1.0在XML List

时间:2017-08-14 17:45:56

标签: xml xslt

我有一个XML 1.0文档,我需要使用XSLT 1.0文件进行转换。我需要转换的XML看起来像这样:

<commandBarData guid="f3016f3c-2847-4557-b61a-a2d05319cf18">
  <menubar>
    <modeData guid="76d73481-9076-44c9-821c-52de9408cce2">
      <item guidRef="0f948c18-f326-40e5-9beb-2efc73803797"/>
      <item guidRef="6c91d5ab-d648-4364-96fb-3e71bcfaf70d"/>
      <item guidRef="71f8ffd6-46bd-43a3-8256-5412bc2d7741"/>
      <item guidRef="ac291790-gf51-d4s1-f23x-dsf9dfb6fgf5"/>
    </modeData>
  </menubar>
</commandBarData>

我需要在元素<item guidRef="21c1f231-e03e-48e8-916a-d8790442b417"/>

之后插入<item guidRef="0f948c18-f326-40e5-9beb-2efc73803797"/>

所以列表看起来像这样:

<commandBarData guid="f3016f3c-2847-4557-b61a-a2d05319cf18">
  <menubar>
    <modeData guid="76d73481-9076-44c9-821c-52de9408cce2">
      <item guidRef="0f948c18-f326-40e5-9beb-2efc73803797"/>
      <item guidRef="21c1f231-e03e-48e8-916a-d8790442b417"/>
      <item guidRef="6c91d5ab-d648-4364-96fb-3e71bcfaf70d"/>
      <item guidRef="71f8ffd6-46bd-43a3-8256-5412bc2d7741"/>
      <item guidRef="ac291790-gf51-d4s1-f23x-dsf9dfb6fgf5"/>
    </modeData>
  </menubar>
</commandBarData>

如何使用XSLT 1.0执行此操作?

我做了几次尝试,现在我的代码大部分都在工作。剩下的一个问题是如何在之后插入元素。以下代码的工作原理除了......

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

<xsl:template 

匹配= “uiConfig /命令栏/ commandBarData /菜单栏/ modeData /项目[@ guidRef = '0f948c18-f326-40e5-9beb-2efc73803797']” &GT;                                     

它生成这个xml:

<item guidRef="0f948c18-f326-40e5-9beb-2efc73803797"><item guidRef="21c1f231-e03e-48e8-916a-d8790442b417" xmlns:frmwrk="Corel Framework Data" /></item>
      <item guidRef="21c1f231-e03e-48e8-916a-d8790442b417" />
      <item guidRef="6c91d5ab-d648-4364-96fb-3e71bcfaf70d" />
      <item guidRef="71f8ffd6-46bd-43a3-8256-5412bc2d7741" />
      <item guidRef="ac291790-gf51-d4s1-f23x-dsf9dfb6fgf5" />

如何在元素后追加它而不是作为孩子插入?

1 个答案:

答案 0 :(得分:0)

此解决方案有效:

<xsl:template match="uiConfig/commandBars/commandBarData/menubar/modeData/item[@guidRef='0f948c18-f326-40e5-9beb-2efc73803797']">
  <xsl:copy>
      <xsl:apply-templates select="node()|@*" />
  </xsl:copy>
  <item guidRef="21c1f231-e03e-48e8-916a-d8790442b417"/>
</xsl:template>