2011-06-07 23 views
1

我曾經發布過很多關於使用XSLT插入XML元素的問題,我是XSLT的新手,我正在學習它。感謝所有幫助我完成任務的人。使用xslt插入無界的XML元素

現在,我想出了另一個問題:所以我插入一個可重複(無界)的XML元素,以便它具有相同的xpath,但元素的值不同,當我將xpath與其覆蓋的模板模式相匹配早先插入的元素。那麼有沒有辦法使用相同的xpath將多個元素插入到現有的XML中?我的輸入是這些元素應該插入的xpath和元素值。比如我輸入的是:

xpath: /root/child 
element to insert: new_element 
with the values: new1, new2 new3 

所以輸出應該是這樣的:

<root> 
<child> 
    <new_element>new1</new_element> 
    <new_element>new2</new_element> 
    <new_element>new3</new_element> 
    </child> 
</root> 

謝謝:)

+0

所以,你正在試圖建立/更新在一個普通的規定的要求的XML文件文本文件。對? – 2011-06-07 18:51:29

+0

是的,但是一個xml文件..所以我寫了一個程序來解析輸入,並提取xpaths要寫入的元素和它們的值。現在,相同的代碼生成xslt腳本,但我堅持的是如何在同一個節點下添加一個元素的多次出現。因爲所有的事件將共享xpath,但具有不同的值。 – tigris 2011-06-07 18:54:46

+0

如果可能的話,發佈輸入文件(包含規格的文件)和xslt模板的實際樣本,清楚地理解它會很有用。 – 2011-06-07 19:28:29

回答

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:variable name="newdata"> 
    <new_element>new1</new_element> 
    <new_element>new2</new_element> 
    <new_element>new3</new_element> 
</xsl:variable> 

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

<xsl:template match="/root/child"> 
    <xsl:copy> 
     <xsl:copy-of select="$newdata"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

鑑於此輸入

<root> 
<child/> 
</root> 

返回:

<root> 
    <child> 
     <new_element>new1</new_element> 
     <new_element>new2</new_element> 
     <new_element>new3</new_element> 
    </child> 
</root> 
+0

是的先生..大猜測:)這就是我正是我正在尋找..非常感謝你empo ..保存了一天! – tigris 2011-06-07 20:25:09

+0

您正在處理的「程序」可能比這樣簡單的xslt代碼更爲複雜。這就是爲什麼你應該花一些時間學習一些XSLT,你可能會節省更多的時間和日子;-)。不過,歡迎您! – 2011-06-07 20:31:51

+0

的確,我將花上週末來學習XSLT ..我現在對它非常感興趣!再次感謝 – tigris 2011-06-07 20:39:47