|
|
|
проверка XML
|
|||
|---|---|---|---|
|
#18+
Пытаюсь проверить XML с помощью XSD схемы Нашел пример на MSXML 4.0 SDK При выполнении выходит, что оба XML правильные. В чем может быть дело? программа priv sOutput As String sOutput = ValidateFile("validXML.xml") sOutput = sOutput + ValidateFile("notvalidxml.xml") MESSAGEBOX(sOutput) Function ValidateFile(strFile As String) *Create an XML DOMDocument object. local x As msxml.DOMDocument,cRet AS String x=CREATEOBJECT('msxml.DOMDocument') *Load and validate the specified file into the DOM. x.async = .F. x.validateOnParse = .T. x.resolveExternals = .T. x.Load(strFile) *Return validation results in message to the user. If x.parseError.errorCode <> 0 cRet = "Validation failed on " +; strFile +CHR(13)+; "=====================" +CHR(13)+; "Reason: " + x.parseError.reason +; +CHR(13) + "Source: "+; x.parseError.srcText +; +CHR(13)+ "Line: " +; x.parseError.Line Else cRet = "Validation succeeded for " +; strFile +CHR(13)+; "======================"+; CHR(13) + x.xml +CHR(13) EndIf RETURN cRet notvalidxml.xml <?xml version="1.0"?> <catalog> <book xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="nn.xsd" id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title> <genre>Computer</genre> <cost>44.95</cost> <publish_date>2000-10-01</publish_date> <description>An in-depth look at creating applications with XML.</description> </book> </catalog> validxml.xml <?xml version="1.0"?> <catalog> <book xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="nn.xsd" id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title> <genre>Computer</genre> <price>44.95</price> <publish_date>2000-10-01</publish_date> <description>An in-depth look at creating applications with XML.</description> </book> </catalog> nn.xsd<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="book" type="bookdata"/> <xsd:complexType name="bookdata"> <xsd:sequence> <xsd:element name="author" type="xsd:string"/> <xsd:element name="title" type="xsd:string"/> <xsd:element name="genre" type="xsd:string"/> <xsd:element name="price" type="xsd:float"/> <xsd:element name="publish_date" type="xsd:date"/> <xsd:element name="description" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:string"/> </xsd:complexType> </xsd:schema> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2005, 09:21 |
|
||
|
проверка XML
|
|||
|---|---|---|---|
|
#18+
efiml...При выполнении выходит, что оба XML правильные. В чем может быть дело? ... На мой взгляд в том, что в функции ValidateFile нет никакого упоминания по схему nn.xsd , поэтому парсер проверяет входящие документы только на well-formed . Если пример кода взят из MSXML 4.0 SDK, то, по-моему, надо создавать XML-DOM объекты по PRGID = "MSXML2.DOMDocument.5.0" (что соответствует версии парсера msxml.dll 4.0), а не "msxml.DOMDocument" (что соответствует версии парсера msxml.dll 3.0 и ниже, но включено для "обратной совместимости" в MSXML 4.0 SDK). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2005, 10:46 |
|
||
|
проверка XML
|
|||
|---|---|---|---|
|
#18+
qu-qu... по-моему, надо создавать XML-DOM объекты по PRGID = "MSXML2.DOMDocument.5.0" ... Эксперимент - подтвердил догадки... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2005, 10:55 |
|
||
|
проверка XML
|
|||
|---|---|---|---|
|
#18+
Все получилось! Большое спасибо! Попутно не подскажите как в msxml2.DOMDocument.5.0 указать xsd схему для xml документа, если в xml нет параметра noNamespaceSchemaLocation ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2005, 02:32 |
|
||
|
проверка XML
|
|||
|---|---|---|---|
|
#18+
efiml... как в msxml2.DOMDocument.5.0 указать xsd схему для xml документа, если в xml нет параметра noNamespaceSchemaLocation ? Что-то типа так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2005, 10:52 |
|
||
|
проверка XML
|
|||
|---|---|---|---|
|
#18+
пример из MSDN (JScript) Код: 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. ЗЫ Уважаемый efiml, оформляйте плиз исходники на форуме тегами SRC как это делает qu-qu ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2005, 12:12 |
|
||
|
проверка XML
|
|||
|---|---|---|---|
|
#18+
M0usпример из MSDN (JScript) Код: plaintext 1. 2. 3. 4. 5. М-дя... напутал я сгоряча с методами XMLSchemaCache ( addCollection - это для добавления уже "готовой" существующей XMLSchemaCache), вот так - получше будет: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. З.Ы. только схему изначальную придется немного переделать: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2005, 16:47 |
|
||
|
проверка XML
|
|||
|---|---|---|---|
|
#18+
У меня не получилось [CSV]x=CREATEOBJECT('msxml2.DOMDocument.5.0') x.async = .F. x.validateOnParse = .T. ?x.Load("nn.xsd") ?x.parseError.reason s=CREATEOBJECT('msxml2.XMLSchemaCache.5.0') s.add(x.namespaceURI ,x) x.schemas = s ?x.Load("nonvalid.xml") && Документ не загружается ?x.parseError.reason && The system cannot locate the object specified. У меня еще вопрос. Вы извините за назойливость, но сроки поджимают... Я проверяю документ по xsd и получаю ошибку, а причину понять не могу. Программа проверки Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Код: plaintext 1. 2. 3. 4. XSD и XML прилагаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2005, 05:02 |
|
||
|
проверка XML
|
|||
|---|---|---|---|
|
#18+
особенно не вникая в исходники (пока нет времени) могу сказать, что последовательность элементов в схеме тоже играют роль. т.е. например Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. про ошибку: Ошибка. Причина Element content is invalid according to the DTD/Schema. Expecting: СвПравЮл, СвПравФл. - отсутствуют элементы СвПравЮл и СвПравФл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2005, 10:33 |
|
||
|
проверка XML
|
|||
|---|---|---|---|
|
#18+
efimlУ меня не получилось .... ?x.Load("nonvalid.xml") && Документ не загружается ?x.parseError.reason && The system cannot locate the object specified. ... Это я виноват, каюсь, я в своем примере переименовал ваш исходный файл с no t valid.xml в no n valid.xml (типа решил быть - "самым грамотным" и не предупредил). По поводу "сроки поджимают..." и вот этого: efiml Код: plaintext 1. Когда-то давно, читал я книжку про XML на аглицком языке, так там был 1 раздельчик, специально посвященный программистам на VB (VFP тоже подойдет): начинался он фразой типа: "Remember the three most valued things - XML IS CASE-SENSITIVE! XML IS CASE-SENSITIVE!!! XML IS CASE-SENSITIVE!!!!!" (вы определяете в схеме элемент СвПравФ Л , а пишете в документе СвПравФ л ). "ТщательнЕе надо, ребята..." © М.М. Жванецкий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2005, 12:19 |
|
||
|
|

start [/forum/topic.php?fid=14&msg=33439961&tid=1334919]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 420ms |

| 0 / 0 |
