#xml #vb.net #xml-parsing
#xml #vb.net #xml-синтаксический анализ
Вопрос:
Пожалуйста, взгляните на приведенный ниже XML
<MessageHeader>
<Master branch_name="ABCD" ref_date="2020-09-23 11:43:46" refno="1">
<mbl_no>1234566</mbl_no>
<mbl_date>2020-08-25 00:00:00</mbl_date>
<agent_code>XXXXX</agent_code>
<agent_name>XXXX YYYYY</agent_name>
<carrier_code>1234</carrier_code>
<carrier_name>XXXXX</carrier_name>
<pol_code>XXX1234</pol_code>
<pol_name>XXXX,YYYY</pol_name>
<HouseBill>
<House slno="1" house_no="XXDEL233695">
<shipper_code>3023233324</shipper_code>
<shipper_name>..Shipper Name...</shipper_name>
<shipper_add1>... Address 1... </shipper_add1>
<shipper_add2>... Address 2...</shipper_add2>
<shipper_add3/>
<shipper_add4/>
</House>
</HouseBill>
</Master>
</MessageHeader>
Я пытаюсь прочитать эту информацию в наборе данных, используя приведенный ниже код:
Dim xmlFile As XmlReader
Dim importFileName As String = "C:107.xml"
xmlFile = XmlReader.Create(importFileName, New XmlReaderSettings())
Dim ds As New DataSet
ds.ReadXml(xmlFile)
Это отлично работает для меня, и я могу получить доступ к столбцам как таковым:
Dim shipperName As String = ds.tables("House").rows(x).Item("shipper_name").tostring()
Мой вопрос в том, как мне получить доступ к таким элементам, как slno и house_no, из родительского узла?
Спасибо
Комментарии:
1. Почему dataset? VB . Net отлично справляется с XML, не прибегая к dataset.
2. Я адаптирую некоторый существующий код для включения другого XML-макета, и для меня это быстрее.
3. На всякий случай я предоставил ответ, который не использует dataset.
Ответ №1:
Без набора данных
Dim xmlFile As XElement
Dim importFileName As String = "C:107.xml"
' xmlFile = XElement.Load(importFileName)
'for testing use litersl
xmlFile = <MessageHeader>
<Master branch_name="ABCD" ref_date="2020-09-23 11:43:46" refno="1">
<mbl_no>1234566</mbl_no>
<mbl_date>2020-08-25 00:00:00</mbl_date>
<agent_code>XXXXX</agent_code>
<agent_name>XXXX YYYYY</agent_name>
<carrier_code>1234</carrier_code>
<carrier_name>XXXXX</carrier_name>
<pol_code>XXX1234</pol_code>
<pol_name>XXXX,YYYY</pol_name>
<HouseBill>
<House slno="1" house_no="XXDEL233695">
<shipper_code>3023233324</shipper_code>
<shipper_name>..Shipper Name...</shipper_name>
<shipper_add1>... Address 1... </shipper_add1>
<shipper_add2>... Address 2...</shipper_add2>
<shipper_add3/>
<shipper_add4/>
</House>
</HouseBill>
</Master>
</MessageHeader>
Dim shipperName As String = xmlFile.<Master>.<HouseBill>.<House>.<shipper_name>.Value
Dim slno As String = xmlFile.<Master>.<HouseBill>.<House>.@slno
Dim house_no As String = xmlFile.<Master>.<HouseBill>.<House>.@house_no
для производства
Dim xmlFile As XElement
Dim importFileName As String = "C:107.xml"
xmlFile = XElement.Load(importFileName)
Dim shipperName As String = xmlFile.<Master>.<HouseBill>.<House>.<shipper_name>.Value
Dim slno As String = xmlFile.<Master>.<HouseBill>.<House>.@slno
Dim house_no As String = xmlFile.<Master>.<HouseBill>.<House>.@house_no
Комментарии:
1. Каждое из этих значений ничего не возвращает при тестировании. Я должен добавить, что это только часть XML-файла, если это имеет значение.
2. Вы должны показать что-то репрезентативное для данных. Если вы запустите код, используя литерал, он работает/
3. Вы правы. Если я запускаю тестовый код, он работает. Если я запускаю производственный код, каждое значение ничего не значит. Это может быть связано с другими элементами, которые я не включил в свой первоначальный пост. Глядя на полную структуру, она выглядит следующим образом: <Master branchname=»xyz» ref=»123″> <Домашняя накладная> Это довольно большой XML-файл, я только включил вышесказанное, когда выбрал опцию dataset
4. Я предоставил более подробную информацию о том, как на самом деле выглядит полный файл
5. Набор данных не будет работать.. Это приведет к фрагментации результатов на множество таблиц данных, которые действительно нельзя использовать. Вы можете использовать DataSet ReadXml только в том случае, если число потомков не превышает 4. Используется корневой тег и имя набора данных. Первые дочерние элементы — это имена таблиц. Вторые дочерние элементы — это имена столбцов. Четвертые дочерние элементы — это данные строки. У вас есть шесть слоев тегов, и в результате получается множество таблиц данных с фрагментами данных в каждой таблице.