我试图将新元素添加到XML文件中的现有元素列表中。我使用此代码启动元素:
A R N D C Q E G H I L K M F P S T W Y V B Z X *
A 4 -1 -2 -2 0 -1 -1 0 -2 -1 -1 -1 -1 -2 -1 1 0 -3 -2 0 -2 -1 0 -4
R -1 5 0 -2 -3 1 0 -2 0 -3 -2 2 -1 -3 -2 -1 -1 -3 -2 -3 -1 0 -1 -4
N -2 0 6 1 -3 0 0 0 1 -3 -3 0 -2 -3 -2 1 0 -4 -2 -3 3 0 -1 -4
D -2 -2 1 6 -3 0 2 -1 -1 -3 -4 -1 -3 -3 -1 0 -1 -4 -3 -3 4 1 -1 -4
C 0 -3 -3 -3 9 -3 -4 -3 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 -3 -3 -2 -4
Q -1 1 0 0 -3 5 2 -2 0 -3 -2 1 0 -3 -1 0 -1 -2 -1 -2 0 3 -1 -4
E -1 0 0 2 -4 2 5 -2 0 -3 -3 1 -2 -3 -1 0 -1 -3 -2 -2 1 4 -1 -4
G 0 -2 0 -1 -3 -2 -2 6 -2 -4 -4 -2 -3 -3 -2 0 -2 -2 -3 -3 -1 -2 -1 -4
H -2 0 1 -1 -3 0 0 -2 8 -3 -3 -1 -2 -1 -2 -1 -2 -2 2 -3 0 0 -1 -4
I -1 -3 -3 -3 -1 -3 -3 -4 -3 4 2 -3 1 0 -3 -2 -1 -3 -1 3 -3 -3 -1 -4
L -1 -2 -3 -4 -1 -2 -3 -4 -3 2 4 -2 2 0 -3 -2 -1 -2 -1 1 -4 -3 -1 -4
K -1 2 0 -1 -3 1 1 -2 -1 -3 -2 5 -1 -3 -1 0 -1 -3 -2 -2 0 1 -1 -4
M -1 -1 -2 -3 -1 0 -2 -3 -2 1 2 -1 5 0 -2 -1 -1 -1 -1 1 -3 -1 -1 -4
F -2 -3 -3 -3 -2 -3 -3 -3 -1 0 0 -3 0 6 -4 -2 -2 1 3 -1 -3 -3 -1 -4
P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4 7 -1 -1 -4 -3 -2 -2 -1 -2 -4
S 1 -1 1 0 -1 0 0 0 -1 -2 -2 0 -1 -2 -1 4 1 -3 -2 -2 0 0 0 -4
T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1 1 5 -2 -2 0 -1 -1 0 -4
W -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 -2 -3 -1 1 -4 -3 -2 11 2 -3 -4 -3 -2 -4
Y -2 -2 -2 -3 -2 -1 -2 -3 2 -1 -1 -2 -1 3 -3 -2 -2 2 7 -1 -3 -2 -1 -4
V 0 -3 -3 -3 -1 -2 -2 -3 -3 3 1 -2 1 -1 -2 -2 0 -3 -1 4 -3 -2 -1 -4
B -2 -1 3 4 -3 0 1 -1 0 -3 -4 0 -3 -3 -2 0 -1 -4 -3 -3 4 1 -1 -4
Z -1 0 0 1 -3 3 4 -2 0 -3 -3 1 -1 -3 -1 0 -1 -3 -2 -2 1 4 -1 -4
X 0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -2 0 0 -2 -1 -1 -1 -1 -1 -4
* -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 1
但是我收到一条错误消息,说我无法使用" /"字符。不知道如何解决这个问题?
更新: 我添加了两个图像,第一个是XML文件的视图和数据所在的位置。文件:OriginalXML 蓝色项中突出显示的是我想要添加的内容(不必位于列表的顶部,附加数据可能更好)。 DisplayName,MultiMedia和CustomData作为简单的CDATA文本。 第二个文件是我运行代码时发生的事情。 (AfterCode.jpg)。请注意突出显示的"选项"似乎是在错误的地方,格式化丢失。 如果要查看原始XML文件,请执行以下操作: http://www.kwhdesign.ca/Temp/paf.xml
![OriginalXML] http://www.kwhdesign.ca/Temp/OriginalXML.jpg
(我无法发布超过2个链接,因此我会在另一条评论中尝试第二张图片)
希望这有帮助! 再次感谢!
答案 0 :(得分:0)
创建元素,然后使用AppendChild
:
Dim newElem As XmlElement = doc.CreateElement("Option")
doc.SelectSingleNode("/Content/Catalog/Feature[7]").AppendChild(newElem)
<强>更新强>
目前还不完全清楚你想要做什么,但如果你想在最后一个<Option>
之后插入一个新的<Option>
元素,那么这样的事情将是一个开始虽然我认为它显示了这将是多么乏味(虽然它完全有可能有更简单的方法来生成新选项)!
Dim newOption = doc.CreateElement("Option")
newOption.SetAttribute("code", "ZZZ")
Dim displayName = doc.CreateElement("DisplayName")
displayName.SetAttribute("lang", "en-US")
displayName.AppendChild(doc.CreateCDataSection("This is a test"))
newOption.AppendChild(displayName)
Dim feature = doc.SelectSingleNode("/Content/Catalog/Feature[7]")
Dim lastOption = feature.SelectSingleNode("Option[last()]")
feature.InsertAfter(newOption, lastOption)
与@dbasnett一样,我更喜欢XDocument
/ XElement
和LINQ to XML。添加一个新的<Option>
将是这样的(注意索引在这里是0,与XPath不同):
Dim doc = XDocument.Load("paf.xml")
doc.<Content>.<Catalog>.<Feature>(6).<Option>.Last().AddAfterSelf(
<Option code="ZZZ">
<DisplayName lang="en-US"><![CDATA[This is a test]]></DisplayName>
<Multimedia type="MediumImage"><![CDATA[Multimedia\Pictures\Medium\SherwinWilliams.jpg]]></Multimedia>
<Multimedia type="LargeImage"><![CDATA[Multimedia\Pictures\Large\SherwinWilliams.jpg]]></Multimedia>
<CustomData><![CDATA[<xml>
<RECKEY code="010201650004001V" />
<VARProp VarID="1237" PropID="Expression" Expr="SHERW" />
<VARProp VarID="3518" PropID="Expression" Expr="SHERW" />
<VARProp VarID="3580" PropID="Expression" Expr="SHERW" />
<VARProp VarID="2149" PropID="VariableType" Expr="104" />
</xml>]]></CustomData>
</Option>
)
答案 1 :(得分:0)
我更喜欢使用xelement来操作XML。这是一个使用xelement的示例。它有几个调试语句,因此您可以看到每个步骤的内容。希望它有所帮助。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim xe As XElement
'to load from a file
' xe = XElement.Load("Your Path Here")
'for testing you can do this
xe = <content>
<Catalog>
<feature></feature>
<feature></feature>
<feature></feature>
<feature></feature>
</Catalog>
</content>
'to add an element to the base
Debug.WriteLine("")
Debug.WriteLine(xe.ToString)
xe.AddFirst(New XElement("foo"))
Debug.WriteLine("")
Debug.WriteLine(xe.ToString)
'to add an element to sub element
Dim optProto As XElement = <option></option>
Dim addthis As New XElement(optProto) 'note New
xe.<Catalog>...<feature>.ElementAt(3).Add(addthis)
Debug.WriteLine("")
Debug.WriteLine(xe.ToString)
addthis.Value = "added" 'note
Debug.WriteLine("")
Debug.WriteLine(xe.ToString)
End Sub