powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как считать узлы в xsd
16 сообщений из 16, страница 1 из 1
Как считать узлы в xsd
    #35577447
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток, ув. програмисты Visual Basic

Подскажите пожалуйста как в xsd файле выбрать значения? Вот, например, имеется xsd-файл:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/XMLSchema.xsd" xmlns:mstns="http://tempuri.org/XMLSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="Table">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="FieldId" type="xs:int" />
				<xs:element name="FieldName" type="xs:string" />
				<xs:element name="FieldType" type="xs:string" />
				<xs:element name="FieldSize" type="xs:int" />
				<xs:element name="FieldKey" type="xs:int" />
				<xs:element name="FieldCode" type="xs:int" />
				<xs:element name="EnumType" type="xs:string" />
			</xs:sequence>
		</xs:complexType>
		<xs:key name="TableKey1">
			<xs:selector xpath="." />
			<xs:field xpath="mstns:FieldId" />
		</xs:key>
	</xs:element>
</xs:schema>

Собственно в VB я его открываю:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Dim oXMLDom As New DOMDocument30
Dim oNode As IXMLDOMNode
Dim nodeList As MSXML2.IXMLDOMNodeList
Dim i%

oXMLDom.async = False
oXMLDom.validateOnParse = False
oXMLDom.resolveExternals = False
oXMLDom.preserveWhiteSpace = True

If oXMLDom.Load(App.Path + "\xml\TableShema.xsd") = False Then
    MsgBox "Failed to load xml data from file."
    Exit Sub
End If

Set nodeList = oXMLDom.selectNodes("//xs")

Debug.Print "xs:"; nodeList.length
        For Each node In nodeList
            For Each attr In node.Attributes
                Debug.Print attr.nodeName; "="; attr.Text,
            Next
            Debug.Print
        Next

Ну и мне в отладчике ничего не печается, а надо чтобы напечатались значения FieldId, FieldName и т.д.

Как их вывести? подскажите пожалуйста
...
Рейтинг: 0 / 0
Как считать узлы в xsd
    #35578599
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возник еще один вопрос, возможно глупый. А можно ли создать пользовательский тип данных в рантайме?
...
Рейтинг: 0 / 0
Как считать узлы в xsd
    #35578683
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Kallandor
> Возник еще один вопрос, возможно глупый. А можно ли создать пользовательский тип
> данных в рантайме?


Зачем тебе в рантайме определять тип?
Или я не понял вопрос?

З.Ы. Вечером отвечу

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как считать узлы в xsd
    #35578691
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> > Автор: Kallandor
> > Возник еще один вопрос, возможно глупый.


И кстати! Для этого вопроса, лучше было создать новую ветку.

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как считать узлы в xsd
    #35578754
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
> Автор: Kallandor
> Возник еще один вопрос, возможно глупый. А можно ли создать пользовательский тип
> данных в рантайме?


Зачем тебе в рантайме определять тип?
Или я не понял вопрос?

З.Ы. Вечером отвечу

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4

Я уже разрабатываю вариант когда нельзя. Ну то есть просто создаю неопределенный массив, а потом делаю его Redim:
Код: plaintext
ReDim TmpArr( 0  To Count_Row +  1 ,  0  To Count_Field)
...
Рейтинг: 0 / 0
Как считать узлы в xsd
    #35578781
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Kallandor
>
> Я уже разрабатываю вариант когда нельзя. Ну то есть просто создаю неопределенный
> массив, а потом делаю его Redim:
>
> ReDim TmpArr(0 To Count_Row + 1, 0 To Count_Field)


Насколько я помню, ReDim действовал только на последную размерность массива.

Сделай структуру классов, которые будут имитировать строки, столбцы и хранилище строк и
столбцов. Нужен доступ по индексам строки/столбца, сделай соответсвующие свойства.

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как считать узлы в xsd
    #35578804
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
> Автор: Kallandor
>
> Я уже разрабатываю вариант когда нельзя. Ну то есть просто создаю неопределенный
> массив, а потом делаю его Redim:
>
> ReDim TmpArr(0 To Count_Row + 1, 0 To Count_Field)


Насколько я помню, ReDim действовал только на последную размерность массива.

Сделай структуру классов, которые будут имитировать строки, столбцы и хранилище строк и
столбцов. Нужен доступ по индексам строки/столбца, сделай соответсвующие свойства.

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4

Не знаю, я как-то написала Redim, он сделал то что мне надо и я довольна :)
...
Рейтинг: 0 / 0
Как считать узлы в xsd
    #35578815
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Игорь Горбонос
> Насколько я помню, ReDim действовал только на последную размерность массива.


Странно, работает. Но я, почему-то уверен, что раньше не работало.

З.Ы. Что-то последнее время стал замечать что работать стало немного по-другому, чем
раньше. И это через пару лет, после прекращения развития языка. "Это жж--ж-жж-ж не
спроста" (с) Винни-Пух

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как считать узлы в xsd
    #35578828
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Kallandor
> Игорь Горбонос
> > Автор: Kallandor
> > ReDim TmpArr(0 To Count_Row + 1, 0 To Count_Field)
>
>
> Насколько я помню, ReDim действовал только на последную размерность массива.
> Не знаю, я как-то написала Redim, он сделал то что мне надо и я довольна :)

а ты попробуй :)
Код: plaintext
1.
2.
3.
4.
5.
Sub asd()
Dim a() As Long
ReDim a( 0  To  2 ,  0  To  3 ) As Long
ReDim a( 0  To  3 ,  0  To  3 ) As Long
ReDim Preserve a( 0  To  4 ,  0  To  3 ) As Long
End Sub


Все-же не маразм и то дело!

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как считать узлы в xsd
    #35581576
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно по этой же теме возник еще один вопрос:

я создала файл xsd. Потом согласно схеме данных, указанных в этом файле создала файл xml. То есть в сформированном файле xml имеется строка:
Код: plaintext
1.
2.
<root xmlns="http://tempuri.org/XMLSchema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://tempuri.org/XMLSchema.xsd
D:\Projects\MyProject\xml\TableShema2.xsd">

Вопрос: когда я загружаю указанный xml файл то как проверить его на соответствие указанной схеме?
...
Рейтинг: 0 / 0
Как считать узлы в xsd
    #35582502
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Kallandor
> Собственно по этой же теме возник еще один вопрос:
>
> я создала файл xsd. Потом согласно схеме данных, указанных в этом файле создала
> файл xml. То есть в сформированном файле xml имеется строка:
> <root xmlns="http://tempuri.org/XMLSchema.xsd"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://tempuri.org/XMLSchema.xsd
> D:\Projects\MyProject\xml\TableShema2.xsd">
> Вопрос: когда я загружаю указанный xml файл то как проверить его на соответствие
> указанной схеме?


Загружаешь куда?
В MSXML3 было свойство которое отвечало за ошибки загруженного документа.

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как считать узлы в xsd
    #35584334
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
Загружаешь куда?
В MSXML3 было свойство которое отвечало за ошибки загруженного документа.


Я сама сформировала xsd-файл, потом согласно этой схеме сформировала xml-файл. Утилита, которой я формировала позволяет валидировать. Собственно. Файл правильно отвалидирован.

Потом когда делаю
Код: plaintext
1.
2.
Dim oXMLDom As New DOMDocument30
f oXMLDom.Load(xmlName)

vb не ругается. Но хотелось бы предусмотреть ситуацию когда кто-нибудь взял да и подправил что-нибудь в xml или xsd ну и написать более менее внятную ошибку.

Да и еще вопрос. Можно ли в загружаемом файле xml динамически поменять место расположения xsd-схемы? И если можно, то как?

P.S. Когда мне что-то не понятно, то я начинаю подробно излагать до какого места не понимаю процесс. Т.е. если ты подумаешь, что я тебе как непонятливому поясняю, то это не так. Это скорее для себя и от своей же глупости. Так что не вздумай обижаться на подобные штрихи. :)
...
Рейтинг: 0 / 0
Как считать узлы в xsd
    #35584852
SoftParanoik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подключать схемы и валидировать XML можно при мерно так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Dim wSchema As New MSXML2.XMLSchemaCache60
With wSchema
  .validateOnLoad = False
  .Add "http://www.MyCompany.ru/Schema1", "c:\Schema1.xsd"
  .Add "http://www.MyCompany.ru/Schema2", "c:\Schema2.xsd"
  .Validate
End With

Dim wXML As New MSXML2.DOMDocument60
Dim wXMLErr As MSXML2.IXMLDOMParseError

With wXML
  .validateOnParse = False
  Set .schemas = wSchema
  .Load "c:\MyFile.xml"
  Set wXMLErr = .Validate
End With

Debug.Print  wXMLErr.errorCode,wXMLErr.srcText

...
Рейтинг: 0 / 0
Как считать узлы в xsd
    #35587666
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoftParanoik

А вы не знаете, почему после того, как файл отвалидируется в соответствии со схемой то больше запросы к нему не проходят? Т.е.:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim oXMLDom As New DOMDocument60
Dim oNode As IXMLDOMNode
Dim attr As IXMLDOMAttribute
Dim nodeList As MSXML2.IXMLDOMNodeList
Dim tempstr$

Set nodeList = oXMLDom.documentElement.selectNodes("/root/Table")
tempstr$ = ""
Count_Field = nodeList.length
For Each oNode In nodeList
    For Each attr In oNode.Attributes
        tempstr$ = tempstr$ + CStr(attr.Text)
    Next
    tempstr$ = tempstr$ + "@@@"
Next

tempstr$ - пустая строка. Если без схемы, то tempstr$ - заполняется так как надо. Почему?
...
Рейтинг: 0 / 0
Как считать узлы в xsd
    #35588014
SoftParanoik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а где в вашей схеме есть описание каких либо атрибутов (кстати и элемент root там тоже не описан) ?!
...
Рейтинг: 0 / 0
Как считать узлы в xsd
    #35591168
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoftParanoikНу а где в вашей схеме есть описание каких либо атрибутов (кстати и элемент root там тоже не описан) ?!

Элемент root - описан. Атрибуты - тоже. И валидируется то ведь нормально. Только вот после валидации не работает (((

xsd
Код: plaintext
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.
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:mstns="http://tempuri.org/XMLSchema.xsd" 
xmlns="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified">
    <xs:element name="root">
        <xs:complexType>
          <xs:sequence maxOccurs="unbounded">
            <xs:element name="Table">
              <xs:complexType>
                <xs:sequence maxOccurs="unbounded">
                  <xs:element name="Field">
                    <xs:complexType>
                      <xs:attribute name="FieldId" type="xs:int" use="required"/>
                      <xs:attribute name="FieldName" type="xs:string" use="required"/>
                      <xs:attribute name="FieldType" type="xs:string" use="required"/>
                      <xs:attribute name="FieldSize" type="xs:int" use="required"/>
                      <xs:attribute name="FieldKey" type="xs:int" use="required"/>
                      <xs:attribute name="PaperCode" type="xs:int" use="required"/>
                      <xs:attribute name="EnumType" type="xs:string" use="required"/>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              <xs:attribute name="TableName" type="xs:string" use="required"/>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
   </xs:element>
</xs:schema>
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как считать узлы в xsd
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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