c# — Получение значений из XML-узлов с более чем одним значением

#c# #xml

#c# #xml

Вопрос:

Прежде всего, я хотел бы уточнить, что я не программирую. Вот мой вопрос. У меня возникли проблемы с получением значений узла с более чем одним значением. Я использую Xml.Linq.

Пример моего XML:

 lt;rootgt;  lt;ManufactureIDgt;testlt;/ManufactureIDgt;  lt;Partgt;21034015lt;/Partgt;  lt;Fixturegt;Erowalt;/Fixturegt;  lt;Materialgt;CrColt;/Materialgt;  lt;ImplantIndex IMP="IMP1"gt;  lt;Position x="26,61927" y="3,666112" z="-13,54083"/gt;  lt;Direction x="0,7169617301164524" y="0,41536091911417444" z="-0,5598581824185941"/gt;  lt;Xaxis x="0,7169617301164524" y="0,41536091911417444" z="-0,5598581824185941"/gt;  lt;Yaxis x="0,4630894965759858" y="0,31652069765969354" z="0,8278663938788802"/gt;  lt;Zaxis x="0,52107004875489" y="-0,8528129659108433" z="0,034583948081838636"/gt;  lt;/ImplantIndexgt;  lt;ImplantIndex IMP="IMP2"gt;  lt;Position x="27,20444" y="3,832021" z="-5,81747"/gt;  lt;Direction x="0,5516120001302346" y="0,2908829003330433" z="-0,7817361061164817"/gt;  lt;Xaxis x="0,5516120001302346" y="0,2908829003330433" z="-0,7817361061164817"/gt;  lt;Yaxis x="0,7202426402494431" y="0,30658331713284814" z="0,6222999347760941"/gt;  lt;Zaxis x="0,420683658440441" y="-0,9063077887504092" z="-0,04039123136907434"/gt;  lt;/ImplantIndexgt; lt;/rootgt;  

Для получения значения узлов детали,приспособления или материала у меня нет проблем. Но для получения значений x/y/z положения и направления на самом деле я использую:

 string position = doc.Root.Element("ImplantIndex").Element("Position").ToString();  string[] posTokens = position.Split('"');  Console.WriteLine(double.Parse(posTokens[1]));  Console.WriteLine(double.Parse(posTokens[3]));  Console.WriteLine(double.Parse(posTokens[5]));  

Кто-нибудь может помочь мне найти лучший способ для выполнения этой последней части?

Заранее спасибо.

Комментарии:

1. вы пытались получить значение атрибута?

2. Фу, не ToString() делай этого и работай над этим таким образом. Получите доступ к атрибутам непосредственно из этого элемента.

3. Пожалуйста, отредактируйте свой вопрос и исправьте XML, чтобы он был правильно сформирован.

4. Да, я пытался получить атрибут, но когда он имеет более одного значения, я не могу его получить. Вот почему я использовал toString().

Ответ №1:

Именно так вы обычно получаете доступ к значению атрибута в узле:

 XmlDocument doc = new XmlDocument(); doc.LoadXml("lt;book genre='novel' ISBN='1-861001-57-5'gt;"    "lt;titlegt;Pride And Prejudicelt;/titlegt;"    "lt;/bookgt;");  XmlElement root = doc.DocumentElement;  // Check to see if the element has a genre attribute. if (root.HasAttribute("genre")){  String genre = root.GetAttribute("genre");  Console.WriteLine(genre); }  

или с помощью XElement

 XElement root = XElement.Load("PurchaseOrder.xml"); IEnumerablelt;XElementgt; address =  from el in root.Elements("Address")  where (string)el.Attribute("Type") == "Billing"  select el; foreach (XElement el in address) Console.WriteLine(el);  

Комментарии:

1. Гораздо лучше использовать API LINQ to XML. Он доступен в .Net Framework с 2007 года.