johnjsm Ответов: 1

Чтение через XML в VB.NET


Всем Привет,
Мне бы действительно не помешала помощь. Я знаю все о xml, и мне нужно что-то сделать с xml. Ниже вы увидите содержимое XML. Мне нужно прочитать следующее

CustomerPartDescription
ComponentPart
ключ продукта
Серийный номер serialno

Приведенный ниже xml имеет только одну часть на нем, но там может быть несколько частей со своим собственным ключом продукта и сериально в xml-файле.
Пожалуйста если у кого то есть время не могли бы они помочь принимая во внимание что я знаю больше чем мало о XML

<?xml version="1.0" encoding="UTF-16"?>
<OrderLoadData>
<VariableData>
<VariableData>
<Header>
<ClientOrderNo>6504271201</ClientOrderNo>
<EMail/>
<PONumber>J071.3.5.0.26698</PONumber>
<RSNComment/>
<PONumber300>3007557587</PONumber300>
<RSNPODate>20190111</RSNPODate>
</Header>
<Lines>
<Line>
<CustomerLineItemNo>000010</CustomerLineItemNo>
<CustomerLineItemNoTrim>10</CustomerLineItemNoTrim>
<PoLineItemNumber>000010</PoLineItemNumber>
<SPSPartNumber>9527-I5PRLUSBINTM [PN-516445]</SPSPartNumber>
<SAPMaterialNumber/>
<RFF05LI/>
<RFF05SE/>
<MktNo/>
<Quantity ordered="5"/>
<CountryOfOrigin>CA</CountryOfOrigin>
<pre><?xml version="1.0" encoding="UTF-16"?>
<OrderLoadData>
<VariableData>
<VariableData>
<Header>
<ClientOrderNo>6504271201</ClientOrderNo>
<EMail/>
<PONumber>J071.3.5.0.26698</PONumber>
<RSNComment/>
<PONumber300>3007557587</PONumber300>
<RSNPODate>20190111</RSNPODate>
</Header>
<Lines>
<Line>
<CustomerLineItemNo>000010</CustomerLineItemNo>
<CustomerLineItemNoTrim>10</CustomerLineItemNoTrim>
<PoLineItemNumber>000010</PoLineItemNumber>
<SPSPartNumber>9527-I5PRLUSBINTM [PN-516445]</SPSPartNumber>
<SAPMaterialNumber/>
<RFF05LI/>
<RFF05SE/>
<MktNo/>
<Quantity ordered="5"/>
<CountryOfOrigin>CA</CountryOfOrigin>
<RegisterTo>
<ContactName/>
<Address1>JON DOE</Address1>
<Address2>Timbucktwo</Address2>
<Address3/>
<Address4/>
<Address5>Earth</Address5>
</RegisterTo>
<PickHeaderId/>
<Installs>001</Installs>
<SellingPrice>18</SellingPrice>
<Components>
<Component>
<ComponentItemNo>1</ComponentItemNo>
<BomItemCount/>
<CustomerPartDecription>ISaGRAF5 Essential Unlimited USB MED S/W</CustomerPartDecription>
<ComponentPart>9527-I5PRLUSBINTM [PN-516445]</ComponentPart>
<Installs>1</Installs>
<Revision>5.22.00</Revision>
<LicenseType>N/A</LicenseType>
<ActivationType>NP</ActivationType>
<LifeTimeExpiration>PERMANENT</LifeTimeExpiration>
<Comments/>
<TermEndDate/>
<TermDays>0000</TermDays>
<Comments/>
<RssType>N</RssType>
<Platform>Y</Platform>
<SerialDetails>
<SerialDetail>
<ComponentLineItemNo>1</ComponentLineItemNo>
<SerialNumberRecord>1</SerialNumberRecord>
<ProductKey>RRRRRRR</ProductKey>
<SerialNo>OOOOOOO</SerialNo>
</SerialDetail>
<SerialDetail>
<ComponentLineItemNo>2</ComponentLineItemNo>
<SerialNumberRecord>2</SerialNumberRecord>
<ProductKey>PPPPPPP</ProductKey>
<SerialNo>UUUUUUU</SerialNo>
</SerialDetail>
<SerialDetail>
<ComponentLineItemNo>3</ComponentLineItemNo>
<SerialNumberRecord>3</SerialNumberRecord>
<ProductKey>NNNNNNN</ProductKey>
<SerialNo>QQQQQQQ</SerialNo>
</SerialDetail>
<SerialDetail>
<ComponentLineItemNo>4</ComponentLineItemNo>
<SerialNumberRecord>4</SerialNumberRecord>
<ProductKey>DDDDDDD</ProductKey>
<SerialNo>WWWWWWW</SerialNo>
</SerialDetail>
<SerialDetail>
<ComponentLineItemNo>5</ComponentLineItemNo>
<SerialNumberRecord>5</SerialNumberRecord>
<ProductKey>YYYYYYY</ProductKey>
<SerialNo>XXXXXXX</SerialNo>
</SerialDetail>
</SerialDetails>
</Component>
</Components>
<Description>ISaGRAF5 Essential Unlimited USB MED S/W</Description>
</Line>
</Lines>
<Details>
<OrderDate/>
</Details>
</VariableData>
</VariableData>
</OrderLoadData>


Что я уже пробовал:

Поискал в интернете, но не знаю, как использовать то, что я нашел

1 Ответов

Рейтинг:
6

Maciej Los

Вы можете сделать это несколькими способами, через:
1) Класс XDocument[^]
2) класс XmlDocument[^]
3) XmlSerialization[^]

Для получения более подробной информации, пожалуйста, смотрите:
Синтаксический анализ XML (Visual Basic) | Microsoft Docs[^]
Как читать XML-данные в набор данных с помощью Visual Basic .NET[^]
Как получить доступ к элементам-потомкам XML (Visual Basic) | Microsoft Docs[^]

Пример:

Dim xdoc As XDocument = XDocument.Load("FullFileNameHere.xml")
	Dim myData = xdoc.Descendants("Component") _
		.Select(Function(x) New With _
			{ _
				.CustomerPartDescription = x.Element("CustomerPartDecription").Value, _
				.ComponentPart = x.Element("ComponentPart").Value, _
				.ProductKey = x.Descendants("SerialDetail").Select(Function(y) y.Element("ProductKey").Value).ToList(), _
				.SerialNo = x.Descendants("SerialDetail").Select(Function(y) y.Element("SerialNo").Value).ToList() _
			})

Возвращается:

CustomerPartDescription                      ComponentPart             ProductKey SerialNo
ISaGRAF5 Essential Unlimited USB MED S/W     9527-I5PRLUSBINTM [PN-516445]     RRRRRRR     OOOOOOO
                                                                               PPPPPPP     UUUUUUU
                                                                               NNNNNNN     QQQQQQQ
                                                                               DDDDDDD     WWWWWWW     
                                                                               YYYYYYY     XXXXXXX


johnjsm

ладно. Выход выглядит великолепно, но как его получить? Извините. Борется с жуком в данный момент и голова поджаривается.

Maciej Los

Внимательно прочтите мой ответ.

johnjsm

У меня есть и в какой-то степени я понимаю, но в то же время это гораздо более продвинуто, чем мои навыки. Извиняюсь

Maciej Los

Ну, никто не ждет от вас, что вы станете экспертом за несколько секунд. Пожалуйста, перейдите по ссылкам, приведенным в моем ответе, и вы найдете метод, который будет более точен для ваших навыков. Не сдавайся! И никогда больше не извиняйся в такой ситуации.

johnjsm

Спасибо за вашу помощь

Maciej Los

Всегда пожалуйста.

johnjsm

Я все еще теряюсь