2013-07-05 2 views
0

일괄 처리 스크립트를 만드는 작은 응용 프로그램을 만들고 있습니다. 모든 작업이 잘 수행되고 모든 작업이 수행되지만 벽돌 벽에 부딪 혔습니다. 배치 도구가 장면을 변환합니다XML 파일에서 이름을 가져 오는 방법

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

I : 카메라 만 이름으로 XML 파일에 암호화 된 파일, 그래서 내가 할 노력하고있어는이처럼 보이는 XML에서 temp.xml 라는 파일에서 카메라 이름을 검색하다 ## Current View ## 및 다른 카메라를 가져와 목록 상자에 추가해야합니다.

나는 이것이 순간 th에서 모호하지 않기를 바란다. e 프로세스는 입니다. 사용자가 장면 이름을 입력하고 경로를 저장합니다. 카메라 이름을 수동으로 입력하거나 버튼을 누르면 명령 행으로 렌더링 소프트웨어가 시작되어 인수가있는 장면이로드됩니다 (모든 모델을 제거하고 텍스처 정보를 밝게합니다.) 그리고 몇 가지 렌더링 옵션과 카메라 정보와 함께 작은 XML을 저장합니다. 그 비트는 작동하지만 나는 뇌가 튀어 올랐다. LOL

카메라가 <> </> 사이에 있다면 나는 그 방법을 알고있다. 그냥 문제를 복잡하게하므로 왜 묻는거야?

답변

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가있는 PC에 없지만 문제는이 개체가 XML과 같은 다른 것들에 사용됩니다. https://dl.dropboxusercontent.com /u/26539256/test.xml 감사합니다. 매우 가까이 보입니다. – NigeC

+0

XML이 적절한 구조를 따른다면 아무런 문제가 없어야합니다. 이 코드가 수행하는 작업은 "개체"의 특성을 찾는 것입니다. "식별자"또는 "이름"을 "객체"의 속성으로 지정하고 다른 부분에서 다른 의미를 부여하면이 코드가 작동하지 않습니다. (어떤 의미인지를 말하기가 약간 어려울 때까지) 다른 접근법을 사용할 수 없습니다. 따라서 "Identifier"또는 "Name"에 액세스하는 올바른 방법은 XML 노드 ("Object")를 분석 한 다음 속성이 원하는 것과 일치하는지 여부를 확인하는 것입니다. – varocarbas

+0

덕분에,이 'code' '(betweenHashes은 아무것도 betweenHashes.Trim.Length> 0 IsNot) 경우에 ListBox1 에 문자열을 추가 그리고 ListBox1.Items.Add (betweenHashes) 주위에 내 머리를 얻을 시작 해요 끝 부분 '코드' 런타임 오류를 찾아 내기 시작 색인을 0으로 만들 수 없습니다. – NigeC

0

XPath 표현식 //Object/@Name은 모든 카메라 이름을 반환합니다.

관련 문제