#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 года.