如何使用VB将数据添加到更大的XML文件

时间:2016-07-16 00:00:39

标签: xml vb.net

论坛的新手,希望有人能够提供帮助。我已经谷歌搜索了这个并且尝试了两天的不同方式。

我有一个更大的XML文件,我想用文件深度添加数据记录。我要添加它的路径是:

//内容/目录/功能[@code =" K65000400"] /尺码

我想在"选项"中添加更多记录。目前有一个包含"代码"和" DisplayName"元素。

我发现的所有示例都只显示了如何从根目录添加记录。

如果有人理解我所说的并且可以提供帮助,那一定会很感激!

顺便使用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数据,所以我使用&#34; grid&#34;来查看文件。我发现更容易阅读的视图。所以我对原始的xml文本不太好,我希望我已经充分解释了。

感谢。

2 个答案:

答案 0 :(得分:0)

考虑运行XSLT。虽然我不了解VB.Net,就像大多数通用语言(C#,Java,PHP,Python)一样,XSLT 1.0处理器也可用。 VB.Net可能像C#一样使用https://docs.nativescript.org/cookbook/connectivity或像VBA一样使用https://github.com/NativeScript/nativescript-background-http(我在MS Access / Excel中做了很多)。

作为信息,XSLTransform是一种用于转换XML文档的特殊用途语言。它的脚本是格式良好的XML文件,因此可以从文件或字符串中读取。在XSLT下面运行Identity Transform以按原样复制文档,然后将模板应用于特定位置,添加所需的新选项。

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 (借鉴DOMDocument

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

答案 1 :(得分:0)

似乎我的问题是在添加&#34; XElement&#34;我应该使用Xelement.AddAfterSelf而不是Xelement.Add 奇怪,但它现在正在工作。