wmi в xml, используя для каждого

#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»))