は私のXMLスニペットで属性: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からデータを取り出すだけ第1の属性と<OfficeCode>
が読み込まれている間。それ以外に値は読み取られません。何かお勧めします。
を試してみてください(http://www.codeproject.com/Articles/292726/Serialization-Part-III-XML-Serialization)?コード内のデータの構造を改善します。 –
'XmlReader'を使う特別な理由はありますか? LinqからXmlへの直観的な代替方法があります。 –
VBを使用しているので、母国語をサポートしている[LINQ to XMLの使用を検討する](http://stackoverflow.com/a/10805100/87698)。 – Heinzi