#xml #vb.net #string #list
#xml #vb.net #строка #Список
Вопрос:
ребята, спасибо за время и помощь, у меня есть функция для установки программного обеспечения на ПК, у меня есть список строк для добавления: название программного обеспечения, версия программного обеспечения, дата установки программного обеспечения. моя проблема в том, что для каждого мне нужно добавить два вторых XML-тега, например, у меня есть название программного обеспечения:
Dim XMLElement As XmlNode = xNode.AppendChild(xDoc.CreateElement("SoftwareName"))
вам нужно больше тегов для версии программного обеспечения и даты установки в одном и том же для каждого
Dim XMLElement As XmlNode = xNode.AppendChild(xDoc.CreateElement("SoftwareVersion"))
Dim XMLElement As XmlNode = xNode.AppendChild(xDoc.CreateElement("SoftwareInstallDate"))
как я могу это сделать?
Try
Dim strSoftware As New List(Of String)
Dim regkey, subkey As Microsoft.Win32.RegistryKey
Dim SoftwareName As String
Dim SoftwareVer As String
Dim includes As Boolean
Dim softwareInstallDate As String
Dim xDoc As New XmlDocument
Dim xNode As XmlNode = xDoc.AppendChild(xDoc.CreateElement("ComputerInfo"))
Dim XMLMasterElement As XmlNode = xNode.AppendChild(xDoc.CreateElement("Software"))
Dim regpath As String = "SoftwareMicrosoftWindowsCurrentVersionUninstall"
regkey = My.Computer.Registry.LocalMachine.OpenSubKey(regpath)
Dim subkeys() As String = regkey.GetSubKeyNames
For Each subk As String In subkeys
subkey = regkey.OpenSubKey(subk)
SoftwareName = subkey.GetValue("DisplayName", "").ToString
SoftwareVer = subkey.GetValue("DisplayVersion", "").ToString
softwareInstallDate = subkey.GetValue("InstallDate", "").ToString
If SoftwareName <> "" Then
includes = True
If SoftwareName.IndexOf("Hotfix") <> -1 Then includes = False
If SoftwareName.IndexOf("Security Update") <> -1 Then includes = False
If SoftwareName.IndexOf("Update for") <> -1 Then includes = False
If includes = True Then strSoftware.Add(SoftwareName.ToString)
strSoftware.Add(SoftwareVer.ToString)
strSoftware.Add(softwareInstallDate.ToString)
End If
Next
For Each Element As String In strSoftware
Dim XMLElement As XmlNode = xNode.AppendChild(xDoc.CreateElement("SoftwareName"))
XMLElement.InnerText = Element.ToString()
Next
xNode.AppendChild(xDoc.CreateElement("Software"))
Dim xWriter As New IO.StringWriter()
Dim xml_writer As New XmlTextWriter(xWriter)
xDoc.WriteTo(xml_writer)
Dim XMSSoftInfo As String = xWriter.ToString()
Return XMSSoftInfo
Catch ex As Exception
WriteEventLogError("error Module GetSoft" ex.Message)
Throw New Exception(ex.Message)
End Try
Комментарии:
1. @har07 спасибо за ваше время сообщение обновлено
Ответ №1:
Ваш код будет более читаемым, если вы будете использовать 3 отдельных списка для хранения каждого типа информации: название программного обеспечения, версия и дата установки (или, может быть, даже лучше, если вы создадите правильную модель). Например :
Dim softwareName As New List(Of String)
Dim softwareVersion As New List(Of String)
Dim softwareInstallDate As New List(Of String)
......
......
'store each information in proper list variable'
softwareName.Add(SoftwareName)
softwareVersion.Add(SoftwareVer)
softwareInstallDate.Add(softwareInstallDate)
......
......
'add information from above 3 lists to XML'
Dim size = softwareName.Count
For i As Integer = 0 To size - 1
Dim name As XmlNode = xNode.AppendChild(xDoc.CreateElement("SoftwareName"))
Dim version As XmlNode = xNode.AppendChild(xDoc.CreateElement("SoftwareVersion"))
Dim installDate As XmlNode = xNode.AppendChild(xDoc.CreateElement("SoftwareInstallDate"))
name.InnerText = softwareName(i)
version.InnerText = softwareVersion(i)
installDate.InnerText = softwareInstallDate(i)
Next
Комментарии:
1. Привет, ребята, один вопрос, как я могу добавить вспомогательные узлы, например, у меня есть Dim XNode как XmlNode = xDoc. appendChild(xDoc.createElement(«ComputerSoftwareInformations»)) как я могу добавить дочерний элемент ComputerSoftwareInformations и поместить всю информацию о программном обеспечении?
2. Решение затемнить XNode как XmlNode = xDoc. appendChild(xDoc.createElement(«ComputerSoftwareInformations»). appendChild(xDoc.createElement(«ComputerSoftwareInformation»))