Конкретная проблема с экранированием кавычек в XML / Xpath - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть особая проблема с некоторыми входящими сообщениями, которые содержат кавычки (например) 's-Hertogenbosch , и мне нужно экранировать первую одинарную кавычку, потому что я не могу внедрить весь набор узлов в Базе данных ... может кто-нибудь сказать мне решение, как я могу игнорировать эту цитату? .. или кратко, как вообще я могу динамически избегать ненужных кавычек в каждом входящем сообщении, кроме первого и последнего.

Я попытался с помощью translate ($ InboundMessage, '"'," (blankspace) "), и он работал нормально, но он удалил все кавычки. Мне нужно сохранить первый и последний слова. Например, мое Входящее сообщение

'В прошлом году я посетил' s-Hertogenbosch '..эта одиночная кавычка наносит вред, потому что на выходе я получил' В прошлом году я побывал 'без названия города.

Решение

Привет.

1 Ответ

0 голосов
/ 10 ноября 2018

Попробуйте это выражение ....

 <xsl:value-of select='replace($InboundMessage, "(.)&apos;+(.)", "$1$2")'/>

Или, если вы хотите сделать это для двойных кавычек ...

<xsl:value-of select="replace($InboundMessage, '(.)&quot;+(.)', '$1$2')"/>

РЕДАКТИРОВАТЬ: Если вы можете использовать только XSLT1.0 и XPATH 1.0, то вам нужно выполнить некоторые манипуляции с строками

<xsl:value-of select='concat(substring($InboundMessage, 1, 1), translate(substring($InboundMessage, 2, string-length($InboundMessage) - 2), "&apos;", ""), substring($InboundMessage, string-length($InboundMessage)))'/>

В качестве альтернативы, учитывая ваш комментарий о построении SQL, вы можете просто заменить все апострофы и поместить внешние апострофы обратно в строку SQL, которую вы строите

<xsl:value-of select='concat("INSERT INTO ", $Destination, " (", $Column, ") VALUES (&apos;", translate($InboundMessage, "&apos;", ""), "&apos;)")'/>
...