2013-07-05 18 views
0

我正在創建批處理渲染腳本的小型應用程序獲取的名字,它的一切進展順利,完成了所有它應該做的,但我已經撞了南牆 批處理工具轉換場景這是加密的XML文件,只有相機命名文件,所以我想要做的是檢索一個名爲temp.xml 在XML文件中的攝像機名稱,它看起來像這樣:如何從一個XML文件

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

我需要獲得##當前視圖##和任何其他的相機,並將其添加到列表框

我希望這不是含糊的時刻次e進程是 用戶輸入一個場景名稱,保存路徑 他們可以手動輸入攝像機名稱或按下按鈕,通過命令行啓動渲染軟件用參數加載場景(去除所有模型,燈光紋理信息等),並保存一個小的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 

正如你所看到的,上面的代碼檢索您從兩個不同的地方想要的東西。我想這些信息足以幫助您理解如何處理VB.NET中的XML解析。

+0

謝謝你的回覆,我不是在我的電腦它有VS,但我認爲這個問題將是該對象被用於其他事情的XML看起來是這樣的:https://dl.dropboxusercontent.com /u/26539256/test.xml 再次感謝它看起來非常接近 – NigeC

+0

如果XML遵循適當的結構,則不應該有任何問題。這段代碼做的是尋找「對象」的屬性。如果您將「標識符」或「名稱」指定爲「對象」的屬性,並在不同部分對它們賦予不同的含義,則此代碼不起作用;但也不會採用任何其他方法(只要說出什麼意思有點困難)。因此,這是訪問「標識符」或「名稱」的正確方法:首先分析XML節點(「對象」),然後檢查其屬性是否與您想要的一致。 – varocarbas

+0

謝謝,我開始讓我的頭圍繞這個 'code' 「添加字符串ListBox1的 如果(betweenHashes狀態並沒有進行任何操作,betweenHashes.Trim.Length> 0),則 ListBox1.Items.Add(betweenHashes) 結束如果 「代碼」 踢了一個運行時錯誤,開始索引不能爲零 – NigeC

0

XPath表達式//Object/@Name將返回所有的攝像機名稱。