У меня есть XML-файлы с разметкой что-то вроде этого:Выбор нескольких значений из XML XDocument (VB.NET)
<?xml version="1.0" encoding="ISO-8859-1"?>
<clients>
<client id="00000" name="Donald Duck">
<group id="AAA" name="ClientInfo">
<term id="Sex">Male</term>
<term id="Status">In a relationship</term>
</group>
<group id="BBB" name="ClientTelephoneNumbers">
<term id="Home">0000-0000000</term>
<term id="Cell">1111-1111111</term>
</group>
<group id="CCC" name="WorkingStatus">
<term id="HasAJob">Yes</term>
<term id="Where">Somewhere</term>
</group>
</client>
<client id="11111" name="Daisey Duck">
<group id="AAA" name="ClientInfo">
<term id="Sex">Female</term>
<term id="Status">In a relationship</term>
</group>
<group id="BBB" name="ClientTelephoneNumbers">
<term id="Home">2222-2222222</term>
<term id="Cell">3333-3333333</term>
</group>
<group id="CCC" name="WorkingStatus">
<term id="HasAJob">Unknown</term>
<term id="Where">Unknown</term>
</group>
</client>
</clients>
Что я хочу сделать, это выбрать только некоторые из этих значений для вывода.
Если у меня есть такой код:
Dim xml As XDocument = Xdocument.Load(ducks.xml)
For Each Duck As XElement in xml.Descendants("client")
Dim Name As String = Duck.Attribute("Name").Value
Next
Я получаю имя (ы) уток, но, скажем, я хочу, чтобы получить номер мобильного телефона, номер домашнего телефона и статус, как я могу затем захватить значение из элемента, где атрибут равен чему-то?
В реальном случае идентификаторы группы более сложны, поэтому я бы предпочёл, чтобы мне не приходилось подсчитывать элементы, я бы хотел их выбрать по их элементарным атрибутам. Например:
Dim xml As XDocument = Xdocument.Load(ducks.xml)
For Each Duck As XElement in xml.Descendants("client")
Dim Name As String = Duck.Attribute("Name").Value
Dim Cellphone As string = Duck.Element("group WHERE id IS BBB").Element("term WHERE id IS Cell").Value
Dim Homephone As string = Duck.Element("group WHERE id IS BBB").Element("term WHERE id IS Home").Value
Next
Я пробовал некоторые запросы, но не мог потрогать его. Какие-либо предложения?
Редактировать примечание: Это не мои реальные попытки для запросов или что-то там в Duck.Element («бла-бла-ГДЕ»), это только для описания того, что я хочу ...
Ну, теперь этот материал хранится в "V", я предполагаю? Как я могу распечатать номер сотового телефона? Console.WriteLine (v.?)? – gubbfett
@gubbfett: 'v' - это коллекция объектов - см. Мое редактирование. Потенциально у вас может быть более одного объекта. В текущем примере, конечно, есть только один. Поэтому вы можете просто написать 'Console.WriteLine (v (0) .cellPhone)'. В идеале у вас будет цикл, проходящий через эту коллекцию. – Neolisk
спасибо! :) – gubbfett