0 / 0 / 0
Регистрация: 05.08.2013
Сообщений: 26
1

Узнать значение внещнего атрибута, предшествующего внутреннему атрибуту

21.08.2013, 14:16. Показов 1203. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Как вытащить значение внешнего атрибута, если выполнилось условие для внутреннего аттрибута?
Например:

XML
1
2
3
4
<None Include="Localization\localization.ru.resx">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      <SubType>Designer</SubType>
    </None>
Я ищу атрибут CopyToOutputDirectory , и когда нахожу, то мне нужно взять значение Localization\localization.ru.resx .
Как это сделать?

Вот мой код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 public static List<String> getOutputRelations(String filePath)
        {
            List<string> outputRelations = new List<string>();
            bool outputRelFlag = false;
            String tempAttr;
            XmlReader reader = XmlReader.Create(filePath);
            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element: // Узел является элементом.
                      
                        switch (reader.Name)
                        {
                            case "CopyToOutputDirectory":
                                outputRelFlag = true;
                                break;
                        }
 
                        //   Console.Write("<" + reader.Name);
                        //   Console.WriteLine(">");
                        break;
                    case XmlNodeType.Text: // Вывести текст в каждом элементе.
                        
                        if (outputRelFlag != false)
                        {
                            Console.WriteLine(reader.Value);
                            outputRelations.Add(reader.Value);
                            outputRelFlag = false;
                        }
                        break;
                    case XmlNodeType.EndElement: // Вывести конец элемента.
                        //   Console.Write("</" + reader.Name);
                        //   Console.WriteLine(">");
                        break;
                }
            }
            return outputRelations;
        }
Как это сделать?
Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.08.2013, 14:16
Ответы с готовыми решениями:

Как узнать значение атрибута у элемента родителя?
собсно тема плз оч. срочно!!! т.е. есть, например, TR и TD нужно по онклик на ТД вывести алерт...

Узнать значение свойства IsIndispensable атрибута типа IndispensableAttribute
using System; namespace Paint { /// &lt;summary&gt; /// Указывает, что член класса или...

Найти количество элементов, значение которых более чем в два раза превосходит значение предшествующего
Привет. Срочно уезжаю. Нужна помощь. Легкие задачи на массивы. Дан массив, содержащий 2014...

Числу х присвоить значение порядкового номера числа, предшествующего цифре 7
Числу х присвоить значение порядкового номера числа, предшествующего цифре 7. Вычислить...

4
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
21.08.2013, 14:20 2
1) сохраняем атрибут независимо от того, какие вложенные элементы есть
2) если есть в наличии нужный элемент - атрибут уже сохранен
0
0 / 0 / 0
Регистрация: 05.08.2013
Сообщений: 26
21.08.2013, 15:35  [ТС] 3
Что то не выходит- выводит совсем предыдущий элемент.:
XML
1
2
3
4
5
6
<ItemGroup>
    <None Include="Localization\BasicEditorControls.ru.resx">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      <SubType>Designer</SubType>
    </None>
</ItemGroup>
а он мне достает элемент предыдущего ItemGroup.

Делаю вот так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
  String tempAttr="";
while (reader.Read())
            {
 
 
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element: // Узел является элементом.
                      
                        switch (reader.Name)
                        {
                            case "CopyToOutputDirectory":
                                outputRelFlag = true;
                                break;
 
                        }
                    break;
                    case XmlNodeType.Text: // Вывести текст в каждом элементе.
 
                        if (outputRelFlag != false)
                        {
                            Console.WriteLine("\n");
                            Console.WriteLine(tempAttr);
                            Console.WriteLine(reader.Value);
                            Console.WriteLine("\n");
                            outputRelations.Add(tempAttr);
                            outputRelFlag = false;
                        }
                        else {
                            tempAttr = reader.Value;
                        }
                        break;
                    case XmlNodeType.EndElement: // Вывести конец элемента.
          
                        break;
                }
            }
Добавлено через 22 минуты
То есть , мне надо как то узнать значение вышестоящего атрибута.
XML
1
2
3
4
5
6
<ItemGroup>
    [B]<None Include="Localization\localization.resx">[/B]
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      <SubType>Designer</SubType>
    </None>
</ItemGroup>
Добавлено через 37 секунд
Хм, не выделился код:
C#
1
<None Include="Localization\localization.resx">
Добавлено через 29 минут
Может быть, стоит использовать XDocument? У него есть методы перехода на ноду назад-вперед.
Но не по атрибутам
0
146 / 143 / 32
Регистрация: 21.01.2012
Сообщений: 545
22.08.2013, 14:52 4
Грузи весь узел ItemGroup в память, потом смотри значение дочернего нода "None" -> дочернего нода "CopyToOutputDirectory". Если имеется такой (хотя мне видится что в твоей задаче нужно смотреть на значение этого нода ==? Always) то смотришь значение аттрибута нода "None"
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
22.08.2013, 16:11 5
можно использовать XmlDocument у его XmlElement есть ParentNode
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2013, 16:11
Помогаю со студенческими работами здесь

Задать значение атрибуту
Хелпаните, как поменять значение атрибута у элемента через js, мой вариант не работает почему-то....

Как можно присвоить значение атрибута одного XML файла атрибута из другого XML файла?
привет, при генерации с помощью SAX некоторого xml файла, как можно присвоить точно такое же...

Как присвоить атрибуту name значение с jquery
вот такой код пока получился: &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset=&quot;utf-8&quot;&gt; ...

Как передать атрибуту значение в виде JS кода?
Добрый день, уважаемые форумчане! Прошу прощения за немного дилетантский вопрос, но всё же: ...

$_POST запрос. Для чего атрибуту value присваивается такое значение
&lt;table&gt; &lt;form method=post&gt; &lt;tr&gt; &lt;td&gt;Имя:&lt;/td&gt; &lt;td&gt;&lt;input type=text name=name...

Выбрать элемент из внещнего iframe
Здравствуйте. Допустим на сайте есть iframe - внешнего сайта Необходимо выбрать элемент внутри...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru