将新数据插入XML文件中的指定节点

时间:2018-08-04 05:51:45

标签: asp.net xml vb.net visual-studio visual-studio-2012

我想使用vb代码在<channel>标签内插入一个新元素。我的代码在 <channel><rss>结束标记end之后添加新项。

我已经尝试过了:

document.Root.Elements.First().Add(root)

但是没有用。

我的xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>

    </channel>
</rss>

这是我的代码:

FilePath = "h:\root\home\ka-001\www\site1\xmlfile1.xml"
Dim document As XDocument = New XDocument()

If File.Exists(FilePath) Then
        document = XDocument.Load(FilePath)
Else
        Label1.Text = "! file dosn't exist"
End If

If FileUpload1.HasFile = True Then
        If FileUpload1.PostedFile.ContentLength <= size Then
            Dim strPath As String
            strPath = "~/files/" & FileUpload1.FileName
            FileUpload1.SaveAs(MapPath(strPath))
        End If
    End If

    attac1 = FileUpload1.FileName

    Dim root As XElement = New XElement("item")
    Dim title As XElement = New XElement("title", New XCData(TextBox3.Text))
    Dim link As XElement = New XElement("link", TextBox6.Text)

    root.Add(title, link)
    document.Root.Add(root)
    document.Save(FilePath)
    Label1.Text = "! done"

1 个答案:

答案 0 :(得分:0)

您不想将新元素添加到 root (即<rss>元素)中,而是将其添加到<channel>子元素中,因此您需要抢先-像这样(C#中的代码-应该很容易转换为VB.NET):

var channelNode = document.Root.Descendants("channel").FirstOrDefault();

然后,一旦有了该通道节点,就可以向其中添加新元素-我假设您要添加一个带有两个子元素的元素<item>-对吗?

这可以通过以下代码完成:

// create new <item> element
XElement item = new XElement("item");

// add sub-element <title> to <item>
item.Add(new XElement("title", new XCData(TextBox3.Text)));

// add sub-element <link> to <item>
item.Add(new XElement("link", TextBox6.Text));

// and now add the <item> element inside the <channel> element
channelNode.Add(item);