-1
我試圖從另一個應用程序生成的XML文件中提取一些信息,爲了清晰起見,這是一個縮減的版本。在VB .Net中解析XML
<?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 ......」太超值了。我迄今爲止所嘗試的所有內容都會返回它,並附帶描述和修訂註釋值,我不想要這些值。
更新
這是最後的代碼,允許未編碼的文件和一些文件的版本不包含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 ...'部分對我來說很奇怪。它不是一個屬性,也不是一個孩子? –
它實際上是應用程序添加到主XML中的base64編碼的XML。我想在這方面,這是無效的,這可能是爲什麼我很難提取該字符串,因爲它沒有屬性名稱。我實際上想要做的是拉動base64字符串,將其解密並將生成的XML插入主XML文件中。 –