2013-07-05 6 views
0

Я делаю небольшое приложение, которое создает сценарии пакетного рендеринга, все идет хорошо и делает все, что должно было делать, но я ударил кирпичную стену. Пакетный инструмент преобразует сцену файл, который зашифрован в файл XML только с именами камер, так что я пытаюсь сделать, это получить имена камеры из файла под названием temp.xml в XML это выглядит следующим образом:Как получить имена из файла XML

<Object Identifier="./Cameras/## Current View ##" Label="Standard Camera" Name="## Current View ##" Type="Camera"> 

I необходимо получить ## Current View ## и любую другую камеру и добавить их в поле списка

Надеюсь, это не смутно на данный момент e process is Пользователь вводит имя сцены, сохраняет путь , они могут либо ввести имена камер вручную, либо нажать кнопку, которая запускает программное обеспечение рендеринга по командной строке, загружает сцену с помощью аргументов (вырезает всю модель, освещает информацию о текстурах и т. д.) и сохраняет крошечный xml с несколькими вариантами визуализации и информацией о камере. Этот бит работает, но у меня есть обжаренный мой мозг.

Если камера была между <> </>, я знаю, как это сделать, я думаю, что я чуть более усложняющих вопросов, поэтому я спрашиваю :)

ответ

0

Если вам нужно иметь дело с XML-файлом, самое лучшее, что вы можете сделать, это полагаться на класс XMLReader. Вот вам пример того, как использовать его с вашей информацией:

Dim path As String = "path of the XML file" 
    Dim settings As System.Xml.XmlReaderSettings = New System.Xml.XmlReaderSettings() 
    settings.ConformanceLevel = System.Xml.ConformanceLevel.Fragment 
    Using reader As System.Xml.XmlReader = System.Xml.XmlReader.Create(path) 
     While (reader.Read()) 
      if (reader.NodeType = System.Xml.XmlNodeType.Element) Then 
       If (reader.Name = "Object") Then 

        Dim wholeAttribute As String 'Whole string as contained in the XML attribute 
        Dim betweenHashes As String 'String between #'s 


        'From "Identifier" 
        wholeAttribute = reader.GetAttribute("Identifier") 
        If (wholeAttribute IsNot Nothing And wholeAttribute.Trim.Length > 0) Then 
         If (wholeAttribute.Contains("#")) Then 
          betweenHashes = wholeAttribute.Substring(wholeAttribute.IndexOf("#"), wholeAttribute.LastIndexOf("#") - wholeAttribute.IndexOf("#") + 1) 
          betweenHashes = betweenHashes.Replace("#", "").Trim() 
         Else 
          betweenHashes = wholeAttribute 
         End If 
        End If 

        'From "Name" 
        wholeAttribute = reader.GetAttribute("Name") 
        If (wholeAttribute IsNot Nothing And wholeAttribute.Trim.Length > 0) Then 
         If (wholeAttribute.Contains("#")) Then 
          betweenHashes = wholeAttribute.Replace("#", "").Trim() 
         Else 
          betweenHashes = wholeAttribute 
         End If 
        End If 


        'Adding the string to ListBox1 
        If (betweenHashes IsNot Nothing And betweenHashes.Trim.Length > 0) Then 
         ListBox1.Items.Add(betweenHashes) 
        End If 


       End If 
      End If 
     End While 
    End Using 

Как вы можете видеть, приведенный выше код извлекает то, что вы хотите от двух разных мест. Я предполагаю, что это информация более чем достаточно, чтобы помочь вам понять, как справляться с разбором XML в VB.NET.

+0

Спасибо за ответ, я не на своем компьютере, у которого есть VS, но я думаю, что проблема будет заключаться в том, что объект используется для других вещей, которые xml выглядит так: https://dl.dropboxusercontent.com /u/26539256/test.xml Еще раз спасибо, он выглядит очень близко – NigeC

+0

Если XML следует правильной структуре, проблем не должно быть. Что делает этот код, он ищет атрибуты «Объект». Если вы назначаете «Идентификатор» или «Имя» в качестве атрибутов «Объект» и даете им разные значения в разных частях, этот код не работает; но также не будет работать какой-либо другой подход (насколько это было бы трудно сказать, что означает что). Таким образом, это правильный способ доступа к «Идентификатору» или «Имя»: во-первых, анализируя узел XML («Объект»), а затем проверяя, соответствуют ли его атрибуты тем, что вы хотите или нет. – varocarbas

+0

Спасибо, я начинаю получить мою голову вокруг этого 'code' «Добавление строки в ListBox1 Если (betweenHashes IsNot Ничто и betweenHashes.Trim.Length> 0), то ListBox1.Items.Add (betweenHashes) End If 'code' Выключить ошибку времени выполнения, индекс начала не может быть нулем – NigeC

0

Выражение XPath //Object/@Name вернет все имена камер.

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