gpt4 book ai didi

xml - 创建 XML 节点

转载 作者:行者123 更新时间:2023-12-04 04:39:16 25 4
gpt4 key购买 nike

我有下面的 XML 文件,我想在第一个 <Profile_Path></Profile_Path> 下添加一个新的 child 节点。

原始 XML:

<?xml version="1.0" encoding="utf-8"?>
<Profiles>
<Profile>
<Profile_Name>Profile 1</Profile_Name>
<Profile_Path>E:\Test</Profile_Path>
</Profile>
<Profile>
<Profile_Name>Profile 2</Profile_Name>
<Profile_Path>E:\Test</Profile_Path>
</Profile>
</Profiles>

运行代码后...
Public Sub CreateProjectXml()

ProfileList.Load(xml_path)
Dim profilesNode As XmlNode = ProfileList.SelectSingleNode("Profiles")
Dim profiles As XmlNodeList = profilesNode.SelectNodes("Profile")
Dim profile As XmlNode = profiles(2)

Dim project_info As XmlElement = ProfileList.CreateElement("Project_Name")

project_info.InnerText = "Project 1"
ProfileList.DocumentElement.AppendChild(project_info)

ProfileList.Save(xml_path)

End Sub

我得到以下结果:
    <?xml version="1.0" encoding="utf-8"?>
<Profiles>
<Profile>
<Profile_Name>Profile 1</Profile_Name>
<Profile_Path>E:\Test</Profile_Path>
</Profile>
<Profile>
<Profile_Name>Profile 2</Profile_Name>
<Profile_Path>E:\Test</Profile_Path>
</Profile>
<Project_Name>Project 1</Project_Name>
</Profiles>

请帮我提供正确的代码!

最佳答案

第一个问题是您通过调用 ProfileList.DocumentElement.AppendChild 来附加子项。 .该方法会将子元素附加到文档元素,即根级 Profiles元素。如果你想把 child 追加到第一个 Profile元素,您需要将其更改为:

Public Sub CreateProjectXml()
ProfileList.Load(xml_path)
Dim profilesNode As XmlNode = ProfileList.SelectSingleNode("Profiles")
Dim profiles As XmlNodeList = profilesNode.SelectNodes("Profile")
Dim profile As XmlNode = profiles(0)
Dim project_info As XmlElement = ProfileList.CreateElement("Project_Name")
project_info.InnerText = "Project 1"
profile.AppendChild(project_info)
ProfileList.Save(xml_path)
End Sub

请注意,在上面的示例中,我将其更改为使用 profiles(0)而不是 profiles(2) ,这样它将使用第一个而不是第三个。

不过值得一提的是 SelectNodesSelectSingleNode使用 XPath。这意味着您可以通过只选择您真正想要的一个元素来大大简化您的逻辑,例如,如果您想要的只是第一个 Profile元素,你可以这样做:
Public Sub CreateProjectXml()
ProfileList.Load(xml_path)
Dim profile As XmlNode = ProfileList.SelectSingleNode("Profiles/Profile")
Dim project_info As XmlElement = ProfileList.CreateElement("Project_Name")
project_info.InnerText = "Project 1"
profile.AppendChild(project_info)
ProfileList.Save(xml_path)
End Sub
SelectSingleNode无论如何,方法只会返回第一个匹配的元素,因此您不需要在 XPath 中指定索引,但如果您想更明确,您可以指定索引只获取第一个,如下所示:
Dim profile As XmlNode = ProfileList.SelectSingleNode("Profiles/Profile[1]")

或者,如果您想获得第三个 Profile元素,您可以改用此 XPath:
Dim profile As XmlNode = ProfileList.SelectSingleNode("Profiles/Profile[3]")

或者,如果您想获得 Profile具有 Profile_Name 的元素等于“配置文件 2”,你可以这样做:
Dim profile As XmlNode = ProfileList.SelectSingleNode("Profiles/Profile[Profile_Name='Profile 2']")

等等。如果您打算大量使用 XML,那么花一些时间学习 XPath 的基础知识是非常值得的。 XPath 是一种标准的 XML 查询语言,用于许多 XML 工具和编程语言。例如,如果您打算使用 XSLT,则需要了解 XPath。 XPath 可以与 XmlDocument 一起使用类,正如我上面提到的,还有更新的 XDocument类。

XPath 的替代方法是使用 LINQ。 LINQ 是一项专有的 Microsoft 技术,因此您不会在 .NET 之外的其他工具和语言中找到对它的任何支持,但许多人确实更喜欢它。新款 XDocument类旨在使 XML 易于通过 LINQ 使用。结合 VB.NET 对内联 XML 文字的支持,使用 XDocument 这个任务实际上很容易。 :
Dim doc As XDocument = XDocument.Load(xml_path)
doc.<Profiles>.<Profile>(0).Add(<Project_Name>Project 1</Project_Name>)
doc.Save(xml_path)

关于xml - 创建 XML 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19181023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com