Как получить значение из xml напрямую (желательно с использованием XPath)? - PullRequest
1 голос
/ 06 марта 2010

Я пытаюсь получить значение comp1 самым простым способом в C #. Я хочу быть в состоянии сделать это способом, который требует наименьшего количества проверок, есть ли такой элемент, как Primary и т. Д.

т.е.

//  pseudo code
xmlItem = root.SelectSingleNode "/Primary/Complex?Name='comp1'"

Так что я могу просто проверить, является ли xmlItem null или не имеет элементов, вместо того, чтобы делать много проверок каждый раз, когда я получаю доступ к дочернему узлу. Вот xml, но фактический является более вложенным, но только конечный xml-узел имеет конкретное имя, которое мы ищем.

<?xml version="1.0" ?>
<Primary Type="">
   <Simple Name="smp"></Simple>
   <Complex Name="comp0" Value="123"></Complex>
   <Complex Name="comp1" Value="456"></Complex>
   <Complex Name="comp2" Value="789"></Complex>
</Primary>

Ответы [ 4 ]

5 голосов
/ 06 марта 2010

Я думаю, что XPath /Primary/Complex[@Name='comp0']/@Value

Кстати, ваш XML неверен. Нет закрывающего тега для Simple, нет открывающего тега для Material. Я предположил, что </Material> должно быть </Simple>.

3 голосов
/ 06 марта 2010
var xmlItem = root.SelectSingleNode("/Primary/Complex[@Name='comp1']/@Value");
2 голосов
/ 06 марта 2010

Попробуйте

root.SelectSingleNode("/Primary/Complex[@Name='comp1']/@Value");
0 голосов
/ 06 марта 2010

Вы захотите использовать XPathDocument и XPathNavigator из пространства имен System.Xml.XPath.

XPathDocument fileToParse = new XPathDocument(FullPathToFile);
XPathNavigator fileNavigator = fileToParse.CreateNavigator();
XPathNavigator selected = fileNavigator.SelectSingleNode("./Primary/Complex[@Name='comp1']/@Value");
//selected will be null if your XPath doesn't select anything...
if(selected != null){ Console.WriteLine(selected.Value); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...