我正在尝试使用linq查找名称等于Foo的MyNode,并创建该节点的副本并将其添加到XML,但新节点应该具有名称Bar,然后保存该文件。
<?xml version="1.0" encoding="utf-8"?>
<MyRoot>
<MyNode Name="Foo">
<Data Type="String">ABC</Data>
</MyNode>
</MyRoot>
此代码找到节点
Dim doc As XDocument = XDocument.Load(xmlFile)
Dim sheet = From item In doc...<MyRoot>...<MyNode> Select item Where item.@Name = "Foo"
我正在尝试使用它来添加节点并更改名称。
sheet.@Name = "Bar" 'After excecuting this, sheet becomes "Nothing"
doc.Root.Add(sheet.First)
doc.Save(outFile)
然而,在设置表。@ Name到“Bar”之后,表格变为 Nothing 。如果我注释掉那一行,输出将有两个节点,都叫做Bar。我怀疑我不是以“正确的方式”执行此操作,无论是更改属性还是将其添加到XDocument(或两者)
答案 0 :(得分:1)
c#version(将尝试翻译)
var doc = XDocument.Load(path);
var node = doc.Elements("MyRoot").Elements("MyNode").FirstOrDefault(m => m.Attribute("Name").Value == "Foo");
var newNode = new XElement(node);
newNode.SetAttributeValue("Name", "Bar");
doc.Root.Add(newNode);
应该是vb
Dim doc as XDocument = XDocument.Load(xmlFile)
Dim sheet = From item...<MyNode>.FirstOrDefault(Function(m) m.@Name = "Foo")
Dim newSheet As New XElement(sheet)
newSheet.SetAttributeValue("Name", "Bar")
doc.Root.Add(newSheet)
答案 1 :(得分:0)
Dim doc As XDocument = XDocument.Load(xmlFile)
Dim sheet = From item In doc...<MyRoot>...<MyNode> Select item Where item.@Name = "Foo"
Dim copy As XElement = New XElement(sheet.First)
copy.SetAttributeValue("Name", "Bar")
doc.Root.Add(copy)
doc.Save(outFile)