sql — ошибка синтаксического анализа XML: «ожидался строковый литерал» при вставке значений в таблицу
спросил
Изменено 9 лет, 11 месяцев назад
Просмотрено 27 тысяч раз
В Microsoft SQL Server 2008 я пытаюсь вставить значения в таблицу sql со столбцами type_id типа данных int и xml_info типа данных XML . Я использую следующий запрос:
INSERT INTO tbl_applied_devices ([type_id], [xml_info]) ЗНАЧЕНИЯ (1, '< /Профиль>') BC4A18CA-AFB5-4268-BDA9-C990DAFE7783 localhost
Но я продолжаю получать эту ошибку:
Сообщение 9413, уровень 16, состояние 1, строка 4
Разбор XML: строка 1, символ 13, ожидался строковый литерал
Что я делаю неправильно?
РЕДАКТИРОВАТЬ: Я обнаружил, что источником ошибки является атрибут ID элемента xml,
, похоже, является причиной ошибки. Как я могу правильно вставить xml с атрибутом? Мне нужно как-то сбежать от одного из персонажей?
- sql
- xml
- sql-server-2008
- tsql
- вставка
XML-документы являются текстовыми ual по своей природе. Это не HTML для веб-страницы, поэтому вам нужны ВСЕ значения атрибутов в кавычках (одинарные или двойные).
ВСТАВИТЬ В tbl_applied_devices ([type_id],[xml_info]) ЗНАЧЕНИЯ (1, '') BC4A18CA-AFB5-4268-BDA9-C990DAFE7783 localhost
Очень сложно разобрать спецификации XML 1.0, но вот версия Microsoft для .Net 4.5, которая так же актуальна для SQL Server XML.
1
Атрибуты, ID является атрибутом, должен быть заключен в кавычки. Попробуйте
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Разбор предложений с помощью комбинатора парсеров Scala
Задавать вопрос
спросил
Изменено 8 лет, 9 месяцев назад
Просмотрено 2к раз
Я только начал играть с комбинаторами синтаксических анализаторов в Scala, но застрял на синтаксическом анализаторе для разбора таких предложений, как «Мне нравится Scala». (_.mkString(«»)) определение предложения: Parser[List[String]] = rep(word) <~ "." } объект Test расширяет приложение { val result = Example.parseAll(Example.sentence, «Мне нравится Scala.») println(результат) }
Идея использования guard()
заключается в том, чтобы точка разграничивала окончания слов, но не использовала ее, чтобы это могли делать предложения. Однако синтаксический анализатор застревает (добавление log()
показывает, что он неоднократно пытается синтаксический анализатор слов
и символов
).
Если я изменю определения слов
и предложений
следующим образом, предложение будет разобрано, но описание грамматики будет выглядеть неправильно и не будет работать, если я попытаюсь добавить синтаксический анализатор для абзаца ( 9(_.mkString(«»))
определение предложения: Parser[List[String]] = rep(word) <~ opt(".")
Есть идеи, что здесь происходит?
- scala
- парсеры-комбинаторы
Однако синтаксический анализатор зависает (добавление log() показывает, что он повторно пытается использовать синтаксический анализатор слов и символов).
Комбинатор rep
соответствует *
в нотации регулярных выражений в стиле Perl. Это означает, что он соответствует нулю или более символов. Я думаю, вы хотите, чтобы это соответствовало один или более символов. Изменение этого на rep1
(соответствующее +
в нотации регулярных выражений в стиле perl) должно решить проблему.
Однако ваше определение все еще кажется мне несколько многословным. Почему вы анализируете отдельные символы, а не просто используете \w+
в качестве шаблона для слова? Вот как я бы это написал:
пример объекта extends RegexParsers { переопределить определение skipWhitespace = false слово определения: Parser[String] = """\w+""".r определение предложения: Parser[List[String]] = rep1sep(word, whiteSpace) <~ "." }
Обратите внимание, что я использую rep1sep
для разбора непустого списка слов, разделенных пробелами.