заменить специальные символы XML-файла - PullRequest
0 голосов
/ 02 марта 2011

Я получаю XML, который я запускаю через процесс XSLT каждый день; однако, случайный специальный символ заставляет это сломаться. Я ищу какую-нибудь утилиту, которая будет очищать XML и заменять специальные символы правильной числовой кодировкой HTML. Просто нужна утилита или идея.

Обновление от комментариев

XML иногда будет включать специальный символ, такой как ¢ скорее чем ¢, поэтому мне нужен способ изменить специальный символ для тега

Ответы [ 3 ]

1 голос
/ 03 марта 2011

Если ваш XSLT-код не может обработать этот входной XML, то либо ввод фактически не является XML, либо вы неправильно представляете его процессору XSLT. Наиболее вероятное объяснение состоит в том, что кодировка файла не соответствует декларации XML в начале файла; или, возможно, не существует декларации XML, поэтому процессор использует UTF-8, но на самом деле это iso-8859-1. Решение может быть таким же простым, как добавление объявления XML в начало файла для объявления кодировки iso-8859-1.

0 голосов
/ 03 марта 2011

Я не могу воспроизвести эту проблему

Эта таблица стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

С этим входом:

<t>¢</t>

Вывод:

<?xml version="1.0" encoding="UTF-16"?>
<t>¢</t>
0 голосов
/ 02 марта 2011

«Специальные» символы (символы Unicode, отсутствующие в ASCII) являются допустимыми XML, поэтому вам действительно следует исправить свой синтаксический анализатор.Если это не сработает, пропустите ваш код через следующий фильтр:

#!/usr/bin/env python

import sys

input = sys.stdin.read().decode('UTF-8')
for c in input:
    sys.stdout.write('&#%04d;' % ord(c) if c >= 128 else c)

Замените UTF-8 на кодировку документа.Сохраните приведенный выше код в xmlentities и звоните как

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