Как мне удалить & # x2002; & # X2014; & # X2013; специальные символы из моих файлов XML - PullRequest
0 голосов
/ 27 июля 2010

это пример XML-файла

<row tnote="0">
<entry namest="col2" nameend="col4" us="none" emph="bld"><blst>
<li><text>Single, head of household, or qualifying widow(er)&#x2014;$55,000</text></li>
<li><text>Married filing jointly&#x2014;$115,000</text></li>
</blst></entry>
<entry colname="col6" ldr="1" valign="middle">&#x2002;</entry>
<entry colname="col7" valign="middle"> 5.</entry>
</row>

&#x2014; и т. Д. Представляют сущности HTML 4.0.я хочу сохранить текст каждой строки как элемент массива, но не в том случае, если строка просто &#x2002;

if e.text.strip =~ /^&#x20[0-9][0-9];$/ then
next
else
subLines << e.text
end

, но, похоже, она не работает ... мой regEx неверен?

Ответы [ 2 ]

2 голосов
/ 27 июля 2010

&#x...; не ссылка на сущность, это ссылка на символ.Для синтаксического анализатора XML &#x2014; абсолютно идентичен необработанному символу , поэтому, если вы посмотрите на DOM, созданный синтаксическим анализатором XML, через свойство, такое как element.text, вы не увидите ничего с амперсандом в нем, но простой символ.

Итак, в принципе, вы бы сопоставили его с регулярным выражением, например, /[—– ]/.Однако, если вы используете Ruby 1.8, у вас есть проблема в том, что сам язык не поддерживает Unicode, поэтому группа символов в /[—– ]/ не будет работать должным образом: она будет пытаться удалить каждый байтв представлении UTF-8 , и , которое, вероятно, будет искажать любые другие символы.

Простая замена строки для каждого целевого символа будет работать правильно, поскольку это нетребует специальной обработки символов.(Естественно, если бы вы включили такие символы, как непосредственно в исходный код, вам также нужно было бы правильно настроить кодировку файла этого сценария, поэтому, вероятно, проще использовать экранированный строковый литерал, например "\xe2\x80\x94".)

1 голос
/ 27 июля 2010

Поскольку ваше регулярное выражение имеет форму /^...$/, оно будет соответствовать только всей строке. Вы пропустите только текст, который целиком состоит из одного объекта HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...