2015-04-11 2 views
0

Как я могу получить значение LINK2 или LINK3 в VB.netПолучить атрибуты XML в VB Net

(я использую узел ("ссылка"). Атрибуты ("HREF"). Value просто получить только 'link1')

<entry> 
     <id>Title</id> 
     <link href='link1' /> 
     <link href='link2' /> 
     <link href='link3' /> 
     <link href='link4' /> 
     <link href='link5' /> 
</entry> 
<entry> 
     <id>Title</id> 
     <link href='link1' /> 
     <link href='link2' /> 
     <link href='link3' /> 
     <link href='link4' /> 
     <link href='link5' /> 
</entry> 

Мой код:

doc.Load(url_get) 
    Dim elemList As XmlNodeList = doc.GetElementsByTagName("entry") 
    Dim node As XmlElement = Nothing 
    For Each node In elemList 
     'code.... 
    NEXT 
+0

Вы можете использовать [XPath] (http://www.w3schools.com/xpath/). [Пример VB.Net] (https://support.microsoft.com/en-us/kb/301220) – Eminem

+0

Что такое 'node' в вашем примере кода? Неясно, что вы использовали для обработки XML: «XDocument», «XElement», «XmlDocument» или что-то еще? Покажите свои коды – har07

ответ

0

Попробуйте это:

dim xDoc as New XMLDocument 
xDoc.LoadXML("<entry><id>Title</id><link href='link1' /><link href='link2' />" & 
    "<link href='link3' /><link href='link4' /><link href='link5' />" & 
    "</entry>") 
dim s As String = xDoc.SelectSingleNode("(/entry/link)[2]").Attributes("href").value 

Это получает вторую ссылку.

Или так:

dim xn as XmlNodeList = xDoc.SelectNodes("/entry/link") 
dim s As String = xn(1).Attributes("href").value 

Это также получает второй (0 основе).

+0

У меня проблема другая, как я использую ваш код в цикле? (я только начинаю learing vb.net) – KhoaZeRo123

+0

Что вы имеете в виду для цикла loop, что вы хотите пропустить? Вы просили разрешения без цикла. Однако XmlNodeList содержит все элементы ссылки (в моем втором примере), вы можете пропустить его. – KekuSemau

+0

Извините, я имею в виду, что это не петля все значение ссылки тега. просто получите одно или два значения. – KhoaZeRo123

1

Вы можете создать XElement из фрагмента XML, а затем получить атрибут href из второго и третьего элементов ссылки, подобных этому.

Dim ent As XElement = <entry> 
          <id>Title</id> 
          <link href='link1'/> 
          <link href='link2'/> 
          <link href='link3'/> 
          <link href='link4'/> 
          <link href='link5'/> 
         </entry> 

Dim links As IEnumerable(Of XElement) = ent.<link> 
Dim link2, link3 As String 
If links.Count > 2 Then 
    link2 = links(1)[email protected] 
    link3 = links(2)[email protected] 
End If 

[Изменить: основываясь на комментарии к другому ответу]. Если вы хотите, чтобы цикл через ссылки 2 до 3 (при условии, что они существуют), вы можете использовать следующий код:

Dim ent As XElement = 
    <entry> 
     <id>Title</id> 
     <link href='link1'/> 
     <link href='link2'/> 
     <link href='link3'/> 
     <link href='link4'/> 
     <link href='link5'/> 
    </entry> 

For i As Integer = 1 To Math.Min(2, ent.<link>.Count - 1) 
    Dim link As String = ent.<link>(i)[email protected] 
    'Do something with link 
Next 
1

Учитывая, что у вас есть это:

Dim xml As XElement = 
     <entry> 
      <id>Title</id> 
      <link href='link1'/> 
      <link href='link2'/> 
      <link href='link3'/> 
      <link href='link4'/> 
      <link href='link5'/> 
     </entry> 

Тогда вы могли бы получить первый и вторые значения, как это:

Dim value1 As String = xml.<link>(0)[email protected] 
    Dim value2 As String = xml.<link>(1)[email protected] 
0

Один из возможных способов, чтобы получить все href на основе кодов вы вывешенные:

doc.Load(url_get) 
Dim elemList As XmlNodeList = doc.GetElementsByTagName("entry") 
Dim node As XmlElement = Nothing 
For Each node In elemList 
    For Each href As XmlNode In node.SelectNodes("link/@href") 
     Console.WriteLine(href.Value) 
    Next 
Next 
+0

Я тестирую ваш код, он возвращает null, этот «entry.SelectNodes (« link/@ href »)« i fix -> node.SelectNodes («link/@ href») правильно? – KhoaZeRo123

+0

Да, это так. Можете ли вы опубликовать содержимое узла.OuterXml, когда selectnodes вернулись null? – har07

Смежные вопросы