2013-06-03 2 views
0

Во-первых, я прошу прощения за имя. Я не мог придумать способ описать мою проблему в форме вопроса. Но это то, что я пытаюсь сделать.Получение значения атрибута из двух узлов XML с одинаковыми данными

Вот что мой XML выглядит как:

<Settings> 
    <Display_Settings> 
    <Screen> 
     <Name Name="Screen" /> 
     <ScreenTag Tag="Screen Tag" /> 
     <LocalPosition X="12" Y="81" Z="28" /> 
     <Width Width="54" /> 
     <Height Height="912" /> 
    </Screen> 
    <Camera_Name Name="Camera"> 
     <CameraTag Tag="Camera Tag" /> 
     <LocalPosition X="354" Y="108" Z="Z Local Position" /> 
     <Far Far="98" /> 
     <Near Near="16" /> 
     <FOV FOV="78" /> 
     <AspectRatio AspectRatio="1" /> 
     <ScreenDistance ScreenDistance="2" /> 
    </Camera_Name> 
    </Display_Settings> 
</Settings> 

То, что я хочу, чтобы получить доступ к значениям атрибутов, хранящихся в моем локальном узле позиции. Я получил некоторую помощь в этом, и я могу получить доступ к экранам значения локального атрибута позиции с этим кодом:

var xdoc = XDocument.Load("C:\\Test.xml"); 
    int x = int)xdoc.Descendants("LocalPosition").First().Attribute("X"); 

Это радостно возвращает 12, когда я его отладку. Но, я также хочу, чтобы мои камеры занимали местную позицию.

Может кто-нибудь, пожалуйста, покажите мне, как это сделать?

+0

Это поможет http://stackoverflow.com/questions/752271/how-to-get-xml-node-from- XDocument –

ответ

1

Вы можете захватить камеры и экрана с помощью позиции Descendants, а затем доступ к его компонентов с Attribute. Примеры кода приведены ниже:

var cameraPosition = xdoc.Descendants("Camera_Name") 
         .First() 
         .Element("LocalPosition"); 

var screenPosition = xdoc.Descendants("Screen") 
         .First() 
         .Element("LocalPosition"); 


//parsing and displaying data 
int cameraX = int.Parse(cameraPosition.Attribute("X").Value); 
int cameraY = int.Parse(cameraPosition.Attribute("Y").Value); 
Console.WriteLine ("camera pos: X={0}; Y={1}", cameraX, cameraY); 

int screenX = int.Parse(screenPosition.Attribute("X").Value); 
int screenY = int.Parse(screenPosition.Attribute("Y").Value); 
Console.WriteLine ("screen pos: X={0}; Y={1}", screenX, screenY); 

принтами:

screen pos: X=12; Y=81 
camera pos: X=354; Y=108 
Смежные вопросы