|
Странное поведение XmlReader
|
|||
---|---|---|---|
#18+
Столкнулся со странностью, которую не могу объяснить. Есть код Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
который читает XML файл Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Так вот, reader читает элементы "c" с пропусками. Т.е. <c r="A2" s="9"/> <c r="C2" s="9"/> <c r="F2" s="9"/> не подряд. Почему, не могу понять. В отладчике ровно так - перескакивает через записи. Дойдя до <c r="I2" s="1" t="s"><v>7</v></c> снова читает все подряд, так как нужно. Кто сталкивался? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2014, 13:28 |
|
Странное поведение XmlReader
|
|||
---|---|---|---|
#18+
Либо вы что-то не привели в коде, либо смотрите что-то не то: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Вывод: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2014, 14:12 |
|
Странное поведение XmlReader
|
|||
---|---|---|---|
#18+
Код конечно указан не весь. Вот как было Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Переделал с учетом вашего предложения. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Только результат один. Отрицательный. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2014, 14:34 |
|
Странное поведение XmlReader
|
|||
---|---|---|---|
#18+
Беда еще в том, что если подсунуть коду XML, то он читает его правильно. Но если читать из Stream объекта FileUpload, то такое странное чтение. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2014, 14:41 |
|
Странное поведение XmlReader
|
|||
---|---|---|---|
#18+
Как формируется XML? Может проблема в этом? т.е. предполагаю - что теги "с" - строятся по какому то условию, и перепутана буква латиница "с" и русская "с" ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2014, 15:35 |
|
Странное поведение XmlReader
|
|||
---|---|---|---|
#18+
Sergey SКак формируется XML? Может проблема в этом? т.е. предполагаю - что теги "с" - строятся по какому то условию, и перепутана буква латиница "с" и русская "с" Если бы... Только файл стандартнее некуда. Распакованный XML из Windows Excel 2007 (*.xlsx). Впрочем могу приложить, можете сами убедиться, что там все нормально. Не исключаю вариант, что взятый по отдельности он будет читаться без проблем. Может эти косяки только у меня на компе. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2014, 15:44 |
|
Странное поведение XmlReader
|
|||
---|---|---|---|
#18+
SQL2008, на форуме приведён xml с разбиением на строки, а в файле содержимое записано в одну строку. То есть в первом случае между элементами присутствует XmlNodeType.Whitespace, а во втором случае - нет. Это распространённая ошибка, не учитывать этот момент при ручном разборе xml. Я сам раньше часто на это напарывался. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2014, 16:39 |
|
Странное поведение XmlReader
|
|||
---|---|---|---|
#18+
Опытным путем было установлено, что использование Код: c# 1.
приводит к пропускам при чтении. Отсюда следует, что нужно повнимательнее использовать эту функцию. Всем спасибо! Думаю, что далее разрулю косяк самостоятельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2014, 16:43 |
|
Странное поведение XmlReader
|
|||
---|---|---|---|
#18+
petalvikна форуме приведён xml с разбиением на строки, а в файле содержимое записано в одну строку. То есть в первом случае между элементами присутствует XmlNodeType.Whitespace, а во втором случае - нет. Это распространённая ошибка, не учитывать этот момент при ручном разборе xml. Я сам раньше часто на это напарывался. Я бы согласился, но это косячит только в одном месте. Далее все работает как нужно. Впрочем, похоже, что я нашел проблему (см выше). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2014, 16:45 |
|
Странное поведение XmlReader
|
|||
---|---|---|---|
#18+
А теперь найдите 10 отличий в том примере xml, который был приведен в стартовом постинге, и в том, который в аттаче. Подсказка: форматирование разметки. Пробелы и переносы строк между узлами - это тоже узлы xml, и ридер движется по ним - если они есть - сообразно вашим командам. Вот такое: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
на исходном xml c переносом строк даст вот такой вывод: Код: 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. 29. 30. 31. 32. 33. 34. 35. 36.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
This is a helper method for reading simple text-only elements. It calls MoveToContent to find the next content node and then parses its value as a simple string. а XmlReader.MoveToContent, в свою очередь Checks whether the current node is a content (non-white space text, CDATA, Element, EndElement, EntityReference, or EndEntity) node. If the node is not a content node, the reader skips ahead to the next content node or end of file. It skips over nodes of the following type: ProcessingInstruction, DocumentType, Comment, Whitespace, or SignificantWhitespace. - в случае xml c переносами MoveToContent, неявно вызываемый при ReadElementString, перемещает ридер на пустой текстовый узел,т.к. это вполне себе нода. А в случае с форматированием в одну строку - на следующий элемент. А если вы отформатируете ваш xml с отступами, то код будет рваться на ReadElementString c ошибкой XmlException: Unexpected node type Element. ReadElementString method can only be called on elements with simple or empty content - т.к. пробельные узлы плюс пустые узлы плюс разметка плюс текст - это уже не simple content (а только тэг и текст - simple). И вывод из всего этого очень простой: не нужно парсить своими средствами. Получайте XmlDocument/XDocument, нужную инфу извлекайте из них. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2014, 16:46 |
|
Странное поведение XmlReader
|
|||
---|---|---|---|
#18+
Сон Веры Павловны и petalvik, большое спасибо, за то, что вывели на правильную дорогу из зарослей заблуждений. Уж начал сомневаться в состоянии рассудка ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2014, 16:58 |
|
Странное поведение XmlReader
|
|||
---|---|---|---|
#18+
Переписал код с использованием XmlDocument и глюки исчезли. Правда при использовании XmlReader-a можно было читать все элементы подряд, а в XmlDocument приходится учитывать структуру вложенности элементов. Вопрос исчерпан, тема закрыта. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2014, 17:57 |
|
|
start [/forum/topic.php?fid=20&tid=1403205]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 165ms |
0 / 0 |