论坛的新手,希望有人能够提供帮助。我已经谷歌搜索了这个并且尝试了两天的不同方式。
我有一个更大的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文本不太好,我希望我已经充分解释了。
感谢。
答案 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"><![CDATA[</xsl:text>
<xsl:value-of select="." disable-output-escaping="yes"/>
<xsl:text disable-output-escaping="yes">]]></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"><![CDATA[</xsl:text>
<xml><RECKEY code="010201650004001V" /></xml>
<xsl:text disable-output-escaping="yes">]]></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 奇怪,但它现在正在工作。