在VB.Net中解析XML

在VB.Net中解析XML,xml,vb.net,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"

我试图从另一个应用程序生成的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>
问题是,我还需要返回'znti6yvck0moctr4nzk1iygdeakm0…'值。到目前为止,我尝试的所有方法都会返回它以及我不想要的描述和修订注释值

更新

这是允许未编码文件和某些不包含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

您必须检查
中所有节点的文本类型。一种简单的方法是使用linq2xml、type方法的
和类型:

示例:

Dim 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>

Dim node = xml.Descendants("EncodedData")(0)
Dim data = node.Nodes().OfType(Of XText)().First().Value.Trim() ' is zNti6YvCK0McoTr4NZK1iyGdEAkM0sxvRC35nnfg/Gd6x+f1lAbsW0PwA4f9TfqHs3MmOQ9OhS9... '
Dim config = node.Attribute("EncryptionConfig").Value ' is 2 '
Dim xml=
zNti6YvCK0McoTr4NZK1iyGdEAkM0sxvRC35nnfg/Gd6x+F1LabSW0PWA4F9TFQHS3MoQ9OHS9。。。
Dim node=xml.substands(“EncodedData”)(0)
Dim data=node.Nodes().Of type(Of XText)().First().Value.Trim()'是zNti6YvCK0McoTr4NZK1iyGdEAkM0sxvRC35nnfg/Gd6x+f1lAbsW0PwA4f9TfqHs3MmOQ9OhS9…'
Dim config=node.Attribute(“EncryptionConfig”)。值“为2”

这是有效的XML吗?“zNti6YvC…”部分在我看来很奇怪。它不是一个属性,也不是一个子元素?它实际上是应用程序添加到主XML中的base64编码的XML。我想在这方面它是无效的,这可能就是为什么我很难提取这个字符串,因为它没有属性名。我实际上要做的是提取base64字符串,对其进行解密,然后将生成的XML插入主XML文件中。
Dim 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>

Dim node = xml.Descendants("EncodedData")(0)
Dim data = node.Nodes().OfType(Of XText)().First().Value.Trim() ' is zNti6YvCK0McoTr4NZK1iyGdEAkM0sxvRC35nnfg/Gd6x+f1lAbsW0PwA4f9TfqHs3MmOQ9OhS9... '
Dim config = node.Attribute("EncryptionConfig").Value ' is 2 '