2016-07-16 12 views
0

新的論壇,希望有人能夠幫助。我一直在谷歌搜索,並嘗試不同的方式2天。如何使用VB將數據添加到更大的XML文件中

我有一個更大的XML文件,我想深入添加數據記錄文件。的地方,我想添加它的路徑是:

//內容/目錄/特性[@碼=「K65000400」] /選項

我要添加更多的記錄到「選項」。目前有68個選項,每個選項都有「代碼」和「顯示名稱」元素。

我發現的所有例子只顯示瞭如何從根中添加記錄。

如果有人明白我在說什麼並能提供幫助,一定會感激不盡!

順便使用VB(VS2015)。

感謝, -Kurt

新的細節:

這裏是一個完整的XML文件的鏈接:link

我魔杖可添加的部分是:

<Option code="TEST"> 
<DisplayName lang="en-US"><![CDATA[Test Description]]</DisplayName> 
<Multimedia type="MediumImage">  
<[CDATA[Multimedia\Pictures\Medium\TestMed.jpg]]></Multimedia> 
<Multimedia type="LargeImage"> 
<[CDATA[Multimedia\Pictures\Large\TestLarge.jpg]]></Multimedia> 
<CustomData> 
<![CDATA[<xml><RECKEY code="010201650004001V" /></xml>]]></CustomData> 
</Option> 

該部分位於:

/內容/目錄/功能[7](選項[69])

希望這有助於。我使用XMLSpy來查看xml數據,所以我使用「網格」視圖來查看文件,我發現它更易於閱讀。所以我對原始xml文本不太好,我希望我已經充分解釋了。

謝謝。

+2

可能重複的[Xml添加刪除和操作數據](http://stackoverflow.com/questions/8356692/xml-adding-removing-and-manipulating-data) –

+0

顯示一些文件,特別是開始,結束和新數據的位置以及新數據的外觀如何, – dbasnett

+0

我更新了原始郵件以包含下載鏈接以及我想要添加到文件的內容。 – kman

回答

0

考慮運行XSLT。雖然我不知道VB.Net,但與大多數通用語言(C#,Java,PHP,Python)一樣,XSLT 1.0處理器也可用。 VB.Net可能使用像C#那樣的XSLTransform或使用像VBA(我在MS Access/Excel中完成了相當多的操作)的DOMDocument

作爲信息,XSLT是一種用於轉換XML文檔的特殊用途的語言。它的腳本是格式良好的XML文件,所以可以從文件或字符串中讀入。在XSLT下面運行身份轉換以按原樣複製文檔,然後將模板應用於特定位置,添加所需的新選項。

XSLT(保存爲的.xsl在VB或負載作爲字符串被加載)

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:output version="1.0" encoding="UTF-8" indent="yes" /> 
<xsl:strip-space elements="*"/> 

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

    <!-- RETAIN XML MARKUP INSIDE CDATA --> 
    <xsl:template match="CustomData"> 
    <xsl:copy> 
     <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text> 
     <xsl:value-of select="." disable-output-escaping="yes"/> 
     <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text> 
    </xsl:copy>  
    </xsl:template> 

    <!-- ADDS NEW OPTIONS TO SPECIFIC NODE --> 
    <xsl:template match="Feature[@code='K65000400']"> 
    <xsl:copy> 
     <xsl:apply-templates select="DisplayName|Description|Multimedia|Option|CustomData"/> 
     <Option code="TEST"> 
     <DisplayName lang="en-US">Test Description</DisplayName> 
     <Multimedia type="MediumImage">Multimedia\Pictures\Medium\TestMed.jpg</Multimedia> 
     <Multimedia type="LargeImage">Multimedia\Pictures\Large\TestLarge.jpg</Multimedia> 
     <CustomData> 
      <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text> 
       <xml><RECKEY code="010201650004001V" /></xml> 
      <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>  
     </CustomData> 
     </Option> 
     <xsl:apply-templates select="FeatureSubset"/> 
    </xsl:copy> 
    </xsl:template> 

</xsl:transform> 

VB(從MSDN Example借用)

Private Function CreateDOM() 
    Dim dom 
    Set dom = New DOMDocument60 
    dom.async = False 
    dom.validateOnParse = False 
    dom.resolveExternals = False 
    Set CreateDOM = dom 
End Function 

Private Sub Form_Load() 
    Dim doc, xsl, out 

    Set doc = CreateDOM 
    doc.Load "C:\Path\To\Input.xml" 

    Set xsl = CreateDOM 
    xsl.Load "C:\Path\To\XSLTScript.xsl" 

    Set out = CreateDOM 
    doc.transformNodeToObject xsl, out 

    out.Save "C:\Path\To\Output.xml" 
End Sub 
+0

XSLT似乎不起作用。它似乎取消了格式化XML文件的一部分。奇?我編輯了我的文章,並添加了一個鏈接來下載XML文件,如果你有興趣嘗試自己,也許代碼可以調整?非常感謝您的幫助。 – kman

+0

查看更新的XSLT腳本。另外,如果不是像嵌入的''(特殊節點名稱)那樣轉義XML標記,則不需要包裝'<!CData'。 – Parfait

+0

這沒有奏效,這可能是我對我在哪裏添加數據的解釋。在內容/目錄/功能[K65000400]下有一個選項節點,其中有68個條目。我想添加第69條(代碼,顯示名稱,多媒體和自定義數據)。當我運行你的代碼時,Feature [K65000400]節點消失,整個文件的格式發生改變。 – kman

0

看來我問題是添加「XElement」時,我應該使用Xelement.AddAfterSelf而不是Xelement.Add奇怪的,但它現在工作。

相關問題