Я пытаюсь извлечь какую-либо информацию из XML-файла, созданного другим приложением, для ясности это сокращенная версия.Анализ XML в VB .Net
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--IE2C Current Input-->
<RSLogix5000Content SchemaRevision="1.0" SoftwareRevision="19.01" >
<Controller Use="Context" Name="MAIN">
<AddOnInstructionDefinitions Use="Context">
<EncodedData EncryptionConfig="2">
<Description>
<![CDATA[IE2C Current Input]]>
</Description>
<RevisionNote>
<![CDATA[Initial Revision]]>
</RevisionNote>
zNti6YvCK0McoTr4NZK1iyGdEAkM0sxvRC35nnfg/Gd6x+f1lAbsW0PwA4f9TfqHs3MmOQ9OhS9...</EncodedData>
</AddOnInstructionDefinitions>
</Controller>
</RSLogix5000Content>
Я могу успешно возвращает значение EncryptionConfig (2), используя следующий код:
Dim xml As XPathDocument = New XPathDocument(filepath)
xmlNav = xml.CreateNavigator()
xmlNI = xmlNav.Select("//EncodedData")
While (xmlNI.MoveNext())
If IsNumeric(xmlNI.Current.GetAttribute("EncryptionConfig", "")) Then
encryptionconfig = xmlNI.Current.GetAttribute("EncryptionConfig", "")
Else
encryptionconfig = 0
End If
End While
xmlNI = Nothing
xmlNav = Nothing
xml = Nothing
Проблема заключается в том, что мне также нужно вернуть только 'zNti6YvCK0McoTr4NZK1iyGdEAkM0 ... значение тоже. Все, что я пробовал до сих пор, возвращает его вместе со значениями Description и RevisionNote, которые я не хочу.
Update
Это окончательный код позволяет некодированные файлы и некоторые версиям файлов, которые не содержат атрибут EncryptionConfig:
Dim b64text As String = ""
Dim encryptionconfig As Integer = 0
Dim xml As XElement = XElement.Load(filepath)
Dim node = xml.Descendants("EncodedData")(0)
If node IsNot Nothing Then
b64text = node.Nodes().OfType(Of XText)().First().Value.Trim()
If node.Attribute("EncryptionConfig") IsNot Nothing Then
encryptionconfig = node.Attribute("EncryptionConfig").Value
End If
Else
Label6.ForeColor = Color.Red
Label6.Text = "File is not encoded"
End If
node = Nothing
xml = Nothing
Является ли это действительным XML? Часть «zNti6YvC ...» выглядит странно для меня. Это не атрибут и не ребенок? –
Это фактически кодированный в формате base64 XML, который приложение добавляет в основной XML. Я предполагаю, что в этом отношении это недействительно, поэтому, вероятно, я испытываю трудности с извлечением этой строки, поскольку у нее нет имени атрибута. То, что я на самом деле пытаюсь сделать, это потянуть строку base64, расшифровать ее и вставить полученный XML обратно в основной файл XML. –