Что нового

XML XSD получить данные из схемы

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Есть XSD схема:
Код:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified">
<xs:simpleType name="NDCListeTyp">
  <xs:restriction base="xs:token">
  <xs:enumeration value="0151"/>
  <xs:enumeration value="01520"/>
  <xs:enumeration value="01521"/>
  <xs:enumeration value="01522"/>
  <xs:enumeration value="01523"/>
 </xs:restriction>
</xs:simpleType>
</xs:schema>
Как получить в массив все значения? (value)
Пока есть такое:
Код:
$xd = ObjCreate("MSXML2.DOMDocument.6.0")
$xd.load($sXMLFile)

$oNode = $xd.getElementsByTagName("NDCListeTyp")
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Вариант с регулярными выражениями:
Код:
#Include <Array.au3>

Local $sXsd = ClipGet(), $sNDCListeTyp, $aResult

$sNDCListeTyp = StringRegExpReplace( $sXsd, '^(?s).*<(?i)xs:simpleType name="NDCListeTyp">(.*?)</(?i)xs:simpleType>.*$', '\1' )
If @Extended = 1 Then
	$aResult = StringRegExp( $sNDCListeTyp, '<xs:enumeration value="([^"]*)"/>', 3 )

	_ArrayDisplay( $aResult )
EndIf


И компактный вариант: :smile:
Код:
#Include <Array.au3>

Local $sXsd = ClipGet(), $sNDCListeTyp = StringRegExpReplace( $sXsd, '^(?s).*<(?i)xs:simpleType name="NDCListeTyp">(.*?)</(?i)xs:simpleType>.*$', '\1' ), $aResult = StringRegExp( $sNDCListeTyp, '<xs:enumeration value="([^"]*)"/>', 3 ), $vRet = _ArrayDisplay( $aResult )
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
нет, нужно через парсер xml а не через регулярные выражения.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
А чем через регулярные выражения не устраивает? Массив не такой?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
inververs [?]
Как получить в массив все значения? (value)
Код:
$oDoc = ObjCreate("Msxml2.DOMDocument.3.0")
Local $aValue

$oDoc.async = False
$oDoc.load(@ScriptDir & "\16507.xsl")

If ($oDoc.parseError.errorCode  <> 0) Then
	$oErr = $oDoc.parseError
	ConsoleWrite(StringFormat("-- Error %s\n", $oErr.reason))
Else
	$oDoc.setProperty("SelectionNamespaces", "xmlns:xs='http://www.w3.org/2001/XMLSchema'")
	$oDoc.setProperty("SelectionLanguage", "XPath")
	$oNodeList = $oDoc.documentElement.selectNodes("//xs:enumeration[@value]")

	For $i = 0 To $oNodeList.length -1
		$oNodeMap = $oNodeList.item($i).attributes
		For $j = 0 To $oNodeMap.length -1
			$aValue &= $oNodeMap.item($j).value & Chr(32)
		Next
	Next
EndIf

$aValue = StringSplit(StringTrimRight($aValue, 1), Chr(32))
_ArrayDisplay($aValue)
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Garrett
А по имени <xs:simpleType name="NDCListeTyp"> можно найти?



Добавлено:
Сообщение автоматически объединено:

Т.к в моей реальной схеме блоков <xs:simpleType name="NDCListeTyp"> очень много, отличаются лишь именем.
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Спасибо. Это то что нужно.
 
Верх