powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / пространство имен в значениях атрибутов
4 сообщений из 4, страница 1 из 1
пространство имен в значениях атрибутов
    #35807757
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

У меня вопрос - как в программе обращаться к значениям атрибутов, содержащих в своем значении префикс пространства имен?

Пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version="1.0" encoding="utf-8"?>
<request 
        xmlns="http://www.olb.ru/commands" 
        xmlns:ss="http://www.olb.ru/commands/SecurityServer" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  ... 
  <command xsi:type="ss:Crypt">
    <ss:provider>MessagePro_3. 0 </ss:provider>
    <ss:data>=34r3434r34=</ss:data>
    <ss:to name="12" password="1111111"/>
  </command>
  ...
</request>

Хочу выбрать все команды, содержащие xsi:type = "ss:Crypt"

Код: plaintext
1.
2.
3.
4.
5.
6.
XNamespace tns = "http://www.olb.ru/commands";
XNamespace ss = "http://www.olb.ru/commands/SecurityServer";
XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance";

var command_list = from command in doc.Root.Elements(tns + "command")
                           where command.Attribute(xsi + "type").Value =="ss:Сrypt"
                           select command;
Так вот, в command.Attribute(xsi + "type").Value =="ss:Decrypt" мешает приставка ss.


хотелось бы что то вроде command.Attribute(xsi + "type").Value == ss + "Decrypt", но так не правильно...
...
Рейтинг: 0 / 0
пространство имен в значениях атрибутов
    #35808363
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал так.

Уж не знаю, насколько правильно с точки зрения архитектуры, но работает. Может, кому поможет.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
XNamespace tns = "http://www.olb.ru/commands";
XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
XNamespace ss = "http://www.olb.ru/commands/SecurityServer";
            
XDocument doc = XDocument.Load("XMLFile2.xml");

string local_ss = doc.Root.Attributes().Where((a, b) => a.Value == "http://www.olb.ru/commands/SecurityServer").Single().Name.LocalName;
var command_list = from command in doc.Root.Elements(tns + "command")
                           where command.Attribute(xsi + "type").Value == local_ss + ":Crypt"
                           select command;

foreach (var command in command_list)
      Console.WriteLine(command);
...
Рейтинг: 0 / 0
пространство имен в значениях атрибутов
    #35813035
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
до-другому, видимо, никак, потому что значение атрибута – чистый текст и на уровне исходной спецификации хмля семантического значения не имеет, это значение может быть добавлено только соответствующим приложением хмля. Теоретически это могло бы быть разрулено чем-нибудь в духе
Код: plaintext
command.Attribute(xsi+"type").Value==doc.Qname(ss+"Crypt")
если бы такое было.
...
Рейтинг: 0 / 0
пространство имен в значениях атрибутов
    #35813087
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
набросал вот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class XQname
{
 XDocument Doc;
 XNamespace Ns;
 string Name;
}

extention XQname Qname(XDocument doc, XNamespace ns, string name)
{ return new XQname {doc,ns,name}; } //ну или как-то так

static bool operator== (string, XQname)
{
  //сравниваем
}
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / пространство имен в значениях атрибутов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]