Select из XMLNode Возвращает данные из всего XML

172
22 января 2019, 07:10

Есть XML

<?xml version="1.0" encoding="utf-8" ?>
    <TablesConfig>  
      <Logs>
        <Table name="T_1" key="id">
          <FieldsSearch>
            <Field>All</Field>        
          </FieldsSearch>
          <LinksDetail>
            <Link table="t_Det11" key ="id" srcKey="id_request" sortField ="id"/>
            <Link table="t_Det12" key ="id" srcKey="id_request" sortField ="id"/>
            <Link table="t_Det13" key ="id" srcKey="id_request" sortField ="id"/>      
          </LinksDetail>
        </Table>
        <Table name="T_2" key="id">
          <FieldsSearch>
            <Field>All</Field>        
          </FieldsSearch>
          <LinksDetail>
            <Link table="t_Det21"  key ="id" srcKey="operid" sortField ="id"/>
            <Link table="t_Det22" key ="id" srcKey="operid" sortField ="id"/>      
          <Link table="t_Det22"   key ="id" srcKey="operid" sortField ="id"/>
          </LinksDetail>
        </Table>
  </Logs>
</TablesConfig>

Пытаюсь получить данные конкретной ноды

class TableSettings {
        XmlDocument doc;
        string tabSettingsPath;
        XmlNodeList nodes;
        XmlNode node;
        public TableSettings(string TableName) {
            doc = new XmlDocument();
            tabSettingsPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath) + "\\ExtFiles\\TablesConf.xml";
            doc.Load(tabSettingsPath);
            node = doc.SelectSingleNode("//Table[@name='"+TableName+"']"); 
        }
        public List<string> getFiltersList() {
            List<string> filtersList = new List<string>();
            foreach (XmlNode inNode in node.SelectNodes("//FieldsSearch/Field")) {
                filtersList.Add(inNode.FirstChild.Value);
            }
            return filtersList;
        }
}
TableSettings ts = new TableSettings ("T_1");
List<String> list = ts.getFiltersList();

Я рассчитываю, что в list должно быть одно значение "All", но в списке 2 значения. node.OuterXml в Дебаге хранит тест только от секции "Т_1" Почему в списке содержатся значения от всего XML а не от конкретной ноды?

Answer 1

Путь начинающийся с // отсчитывается от корня.

Добавьте в начало точку (текущий узел): ".//FieldsSearch/Field".

Или пишите просто "FieldsSearch/Field", т. к. это прямой потомок узла Table.

READ ALSO
Контрольная сумма для заголовка IPv4

Контрольная сумма для заголовка IPv4

Был задан такой вопрос, но я вроде как приблизился к решению вопроса о своей задачеВ интернете найден мной такой метод:

191
WPF: добавить элемент в ObservableCollection&lt;T&gt; через IEnumerable

WPF: добавить элемент в ObservableCollection<T> через IEnumerable

Такая дилемма: у меня есть эдакий "ItemsSource" в моем элементе управленияDependencyProperty типа IEnumerable

162