2017-08-14 44 views
0

我有一個XML 1.0文檔,需要使用XSLT 1.0文件進行轉換。我需要轉換XML看起來是這樣的:使用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="0f948c18-f326-40e5-9beb-2efc73803797"/>

之後插入<item guidRef="21c1f231-e03e-48e8-916a-d8790442b417"/>所以名單看起來就像這樣:

<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']」>

它生成此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" /> 

我如何使它的元素之後追加,而不是插入的孩子?

+0

確切位置在哪裏,你堅持了嗎?發佈您的嘗試,以便我們可以修復它,而不必從頭開始爲您編寫代碼。 –

+0

@ michael.hor257k通常,我會這樣做。到目前爲止,我的問題是我對xslt很不熟悉,所以到目前爲止我的嘗試都是基於甚至不接近的。無論如何,我會添加它們。 –

+1

如果您需要一個起始點,請從[標識轉換](https://www.w3.org/TR/xslt#copying)開始,然後添加另一個與[item] [@ guidRef ='0f948c18-f326- 40e5-9beb-2efc73803797' ]'。該模板應該複製當前的'item'並且創建新的'item'。 –

回答

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>