Мне было поручено создать доступный RSS-канал для списков вакансий в моей компании. У меня уже есть RSS-канал от нашего партнера по набору персонала; поэтому я преобразовываю их RSS XML в наш собственный RSS-канал прокси, чтобы добавить дополнительные данные, а также ограничить количество элементов в ленте, чтобы мы указывали последние вакансии.
RSS проверяется через feedvalidator.org (с предупреждениями); но проблема вот в чем. К сожалению, сколько бы раз я ни говорил им этого не делать; отдел кадров моей компании напрямую копирует и вставляет свои документы Word в CMS наших партнеров по набору персонала при вставке новых списков вакансий, оставляя WordML в моей ленте. Я считаю, что этот WordML вызывает проблемы с функцией BrowserFriendly Feedburner; которые мы хотим показать, чтобы людям было проще подписаться. Поэтому мне нужно удалить разметку WordML в ленте.
У кого-нибудь есть опыт в этом? Может ли кто-нибудь указать мне хорошее решение этой проблемы?
Предпочтительно; Я хотел бы указать на решение в .Net (VB или C# подойдет) и / или XSL.
Мы очень ценим любые советы по этому поводу.
Спасибо.





Я бы сделал что-то вроде этого:
char[] charToRemove = { (char)8217, (char)8216, (char)8220, (char)8221, (char)8211 };
char[] charToAdd = { (char)39, (char)39, (char)34, (char)34, '-' };
string cleanedStr = "Your WordML filled Feed Text.";
for (int i = 0; i < charToRemove.Length; i++)
{
cleanedStr = cleanedStr.Replace(charToRemove.GetValue(i).ToString(), charToAdd.GetValue(i).ToString());
}
Это будет искать символы, указанные в ссылке, (которые являются специальными символами Word, которые все портят и заменяют их соответствующими эквивалентами ASCII.
Джефф Эттвуд некоторое время назад писал в блоге о том, как это сделать. Его сообщение содержит некоторый код на C#, который очистит WordML.
http://www.codinghorror.com/blog/archives/000485.html
Спрашивающий говорил, что контент, который копируется и вставляется из слова, содержит множество нежелательных тегов HTML. Код Джеффа удалит их.
Я еще не работал с WordML, но если предположить, что его элементы находятся в пространстве имен, отличном от RSS, это должно быть довольно просто сделать с помощью XSLT.
Начните с базового преобразования идентичности (таблица стилей, которая добавляет все узлы из входного документа «как есть» в выходное дерево). Вам понадобятся эти два шаблона:
<!-- Copy all elements, and recur on their child nodes. -->
<xsl:template match = "*">
<xsl:copy>
<xsl:apply-templates select = "@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<!-- Copy all non-element nodes. -->
<xsl:template match = "@*|text()|comment()|processing-instruction()">
<xsl:copy/>
</xsl:template>
Преобразование с использованием таблицы стилей, содержащей только два вышеуказанных шаблона, будет точно воспроизводить входной документ на выходе по модулю тех вещей, которые совместимым со стандартами процессорам XML разрешено изменять, например замену сущностей.
Теперь добавьте шаблон, соответствующий любому элементу в пространстве имен WordML. Дадим ему префикс пространства имен wml для целей этого примера:
<!-- Do not copy WordML elements or their attributes to the
output tree; just recur on child nodes. -->
<xsl:template match = "wml:*">
<xsl:apply-templates/>
</xsl:template>
Начало и конец таблицы стилей оставлены кодировщику в качестве упражнения.
Статья Джеффа посвящена очистке вредоносного HTML-кода, который генерирует Word, а не удалению элементов XML из файла WordML.