以下是我的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>
。除此之外,没有值被读取。请提出建议。
答案 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