powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Валидация XSD файла XML без пространства имён
5 сообщений из 5, страница 1 из 1
Валидация XSD файла XML без пространства имён
    #36835469
sedan13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имею XML файл:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version="1.0" encoding="utf-8" ?> 
<root> 
    <row>
        <field1>text1</field1> 
        <field2>text2</field2> 
        <field3>text3</field3> 
        <field4>text4</field4>
    </row>
    ...
    <row>
        ...
    </row>
</root> 
т.е. пространства имён в валидируемом XML файле не определены (так надо).

Провожу валидацию посредством XSD:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="MySchema" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence maxOccurs="unbounded">
        <xs:element name="row"  type="row_type" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="row_type">
    <xs:sequence>
      <xs:element name="field1" type="xs:nonNegativeInteger"/>
      <xs:element name="field2" type="xs:nonNegativeInteger"/>
      <xs:element name="field3" type="xs:string"/>
      <xs:element name="field4" type="xs:decimal"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

валидирую следующим образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
XDocument doc = XDocument.Load(xmlFile);
            
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add(null, xsdFile);
bool errors = false;
doc.Validate(schemas, (sender, e) =>
                                           {
                                               errors = true;
                                            }
                 );

if (!errors)
{
     //работаем с XML файлом, если он корректный
}
Т.к. в XML файле у меня не определено пространство имён, то файл проверку не проходит. Если же (в целях самопроверки) добавляем пространство имён:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version="1.0" encoding="utf-8" ?> 
<root xmlns="http://www.w3.org/2001/XMLSchema"> 
    <row>
        <field1>text1</field1> 
        <field2>text2</field2> 
        <field3>text3</field3> 
        <field4>text4</field4>
    </row>
    ...
    <row>
        ...
    </row>
</root> 

то файл проходит валидацию.

Вопрос: как сделать так, чтобы файл проходил валидацию без добавления к полю <root> пространство имён xmlns="http://www.w3.org/2001/XMLSchema"? (т.е. как для этого надо изменить схему XSD?)
...
Рейтинг: 0 / 0
Валидация XSD файла XML без пространства имён
    #36836631
Edkonst2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sedan13,

А что мешает добавить-то?
...
Рейтинг: 0 / 0
Валидация XSD файла XML без пространства имён
    #36846631
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А с какого перепугу файл будет валидным?
sedan13
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version="1.0" encoding="utf-8" ?> 
<root> 
    <row>
        <field1>text1</field1> 
        <field2>text2</field2> 
        <field3>text3</field3> 
        <field4>text4</field4>
    </row>
..............
      <xs:element name="field1" type="xs:nonNegativeInteger"/>
      <xs:element name="field2" type="xs:nonNegativeInteger"/>
      <xs:element name="field3" type="xs:string"/>
      <xs:element name="field4" type="xs:decimal"/>
...
Рейтинг: 0 / 0
Валидация XSD файла XML без пространства имён
    #36861460
sedan13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_А с какого перепугу файл будет валидным?
sedan13
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version="1.0" encoding="utf-8" ?> 
<root> 
    <row>
        <field1>text1</field1> 
        <field2>text2</field2> 
        <field3>text3</field3> 
        <field4>text4</field4>
    </row>
..............
      <xs:element name="field1" type="xs:nonNegativeInteger"/>
      <xs:element name="field2" type="xs:nonNegativeInteger"/>
      <xs:element name="field3" type="xs:string"/>
      <xs:element name="field4" type="xs:decimal"/>

c того перепугу, что в field1 и field2 у меня nonNegativeInteger, а в field4 соответственно decimal

как можно программно добавить пространство имён к корневому элементу <root> к уже считанному XML в XDocument?
...
Рейтинг: 0 / 0
Валидация XSD файла XML без пространства имён
    #36861468
sedan13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в общем изящного решения искать не стал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
XDocument xmlFile = XDocument.Load(file.FullName);
                 
                XNamespace nameSpace = "http://www.w3.org/2001/XMLSchema";
                ArrayList XMLElements = new ArrayList();
                foreach (XElement element in xmlFile.Element("root").Elements())
                {
                    XMLElements.Add(element);
                }
                XDocument XMLWithNS = new XDocument(
                                                        new XDeclaration("1.0", "utf-8", null),
                                                        new XElement(nameSpace + "root")
                                                    );
                foreach (XElement XMLElement in XMLElements)
                {
                    XMLWithNS.Root.Add(XMLElement);
                }
тема закрыта
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Валидация XSD файла XML без пространства имён
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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