XML读取属性问题

时间:2016-11-24 12:26:37

标签: .net xml vb.net

以下是我的xml片段:

<root>
  <EmployeeSearcher_CMSRequest xmlns="http://schemas.datacontract.org/2004/07/xxxx" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <IsActive>A</IsActive>
    <DepartmentCode>4775</DepartmentCode>
    <OfficeCode>KA016</OfficeCode>
    <EmployeeFirstName>James</EmployeeFirstName>
    <EmployeeId>0043044</EmployeeId>
    <EmployeeLastName>Malarkey</EmployeeLastName>
  </EmployeeSearcher_CMSRequest>
</root>

以下是检索xml数据的代码:

Public Function GetRequest(Of TRequest)(Optional ByVal fileName As String = Nothing) As TRequest()
    Dim objCertificateCountRequest As List(Of TRequest) = New List(Of TRequest)
    Dim serializer As DataContractSerializer = New DataContractSerializer(GetType(TRequest))

    'Get the assembly folder
    Dim assemblyPath As String = New Uri(Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath
    'Get the file name
    If (IsNothing(fileName)) Then
        fileName = Path.GetDirectoryName(assemblyPath) + testDataForlder + GetType(TRequest).Name + ".xml"
    Else
        fileName = Path.GetDirectoryName(assemblyPath) + testDataForlder + fileName + ".xml"
    End If

    Try
        Dim settings As New XmlReaderSettings()
        settings.IgnoreWhitespace = True
        Dim reader As XmlReader = XmlReader.Create(fileName, settings)

        reader.ReadStartElement("root")

        While reader.IsStartElement(GetType(TRequest).Name)

            objCertificateCountRequest.Add(CType(serializer.ReadObject(reader), TRequest))

        End While

        reader.ReadEndElement() 'Read root
        reader.Close()

        Return objCertificateCountRequest.ToArray()
    Catch ex As Exception

        Throw New System.Exception("Error deserializing input xml for Request:" + GetType(TRequest).Name + vbLf + ex.Message)

    End Try

End Function

从xml检索数据时,只读取第一个属性和<OfficeCode>。除此之外,没有值被读取。请提出建议。

1 个答案:

答案 0 :(得分:0)

您需要一个命名空间。试试xml linq

Imports System.Xml
Imports System.Xml.Linq
Module Module1
    Const FILENAME As String = "c:\temp\test.xml"
    Sub Main()
        Dim doc As XDocument = XDocument.Load(FILENAME)
        Dim request = doc.Descendants().Where(Function(x) x.Name.LocalName = "EmployeeSearcher_CMSRequest")
        Dim ns As XNamespace = request.FirstOrDefault().GetDefaultNamespace
        Dim employee = request.Select(Function(x) New With { _
            .isActive = x.Element(ns + "IsActive").Value,
            .departmentCode = x.Element(ns + "DepartmentCode").Value,
            .officeCode = x.Element(ns + "OfficeCode").Value,
            .employeeFirstName = x.Element(ns + "EmployeeFirstName").Value,
            .employeeId = x.Element(ns + "EmployeeId").Value,
            .employeeLastName = x.Element(ns + "EmployeeLastName").Value
         }).FirstOrDefault()

    End Sub

End Module