在XML中添加其他节点

时间:2014-05-01 08:37:32

标签: vb.net linq-to-xml

我使用以下代码

创建XML文档
For Each cust As Customer In Customers
XDoc = <?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<Customers>
<Customer>
<Name>Mike</Name>
<Age>0</Age>
</Customer>
</Customers>
Next

XDoc.Save("C:\myXmlfile.xml")

然而它似乎只添加了一条记录,但我不知道如何读取每条记录的节点?所以如果theres 2记录那么我会期待

<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<Customer>
<Name>Mike</Name>
<Age>0</Age>
</Customer>
<Customer>
<Name>Mike</Name>
<Age>0</Age>
</Customer>

但它应该只生成一个xml文件。

有人能引导我做我需要做的事吗?即使在搜索周围我不是100%肯定因为太多方法而且我可能感到困惑。

由于

3 个答案:

答案 0 :(得分:2)

在循环内部,您将XDoc设置为客户。这意味着当您保存XDOC时,只会保存最后一个客户。

即使您修复了上述问题,您仍然会遇到尝试将多个根元素(每个客户)添加到XML文档的问题。这是不允许的,只允许一个根元素。因此,要生成有效的XML文档,您需要以下内容:

 <Customers>
   <Customer>
     <Name>Mike</Name>
     <Age>0</Age>
   </Customer>
   <Customer>
     <Name>Mike</Name>
     <Age>0</Age>
   </Customer>
 </Customers>

对不起,我建议如何更改代码,因为我不知道XML的VB.Net扩展。希望其他人会有所帮助。

顺便说一下,有趣的句柄。

答案 1 :(得分:1)

您可以单独生成XDocumentXElement 此外,您可以使用<%= %>设置变量数据。

因此,您应该生成并组合如下。

' Generate customers
Dim customers As XEelement = <Customers></Customers>
For Each cust As Customer In Customers
    customers.Add( 
        <Customer>
            <Name><%= cust.Name %></Name>
            <Age><%= cust.Age %></Age>
        </Customer>
    )
Next

' Combine customers
Dim XDoc As XDocument = 
    <?xml version="1.0" encoding="UTF-16" standalone="yes"?><%= customers %>
XDoc.Save("C:\myXmlfile.xml")

答案 2 :(得分:0)

除了@ RichardSchneider的回答,这是VB中的示例代码段。

首先,以单个XDocument元素为根构建<Customers>。然后在For Each循环的每次迭代中,将单个<Customer>元素添加到XDocument的根元素:

XDoc As XDocument = <?xml version="1.0" encoding="UTF-16" standalone="yes"?><Customers></Customers>
For Each cust As Customer In customers
    XDoc.Root.Add(
        <Customer>
            <Name>Mike</Name>
            <Age>0</Age>
        </Customer>
    )
Next
XDoc.Save("C:\myXmlfile.xml")