2008-10-27 3 views
2

Мне поручили создать доступный канал RSS для списков вакансий моей компании. У меня уже есть RSS-канал от нашего партнера по подбору персонала; поэтому я преобразовываю их RSS XML в наш собственный прокси-канал RSS, чтобы добавить дополнительные данные, а также ограничить количество элементов в фиде, чтобы мы перечислили последние задания.Strip WordML из строки

RSS проверяет через feedvalidator.org (с предупреждениями); но проблема в этом. К сожалению, независимо от того, сколько раз я им говорю; персональная команда моей компании напрямую копирует и вставляет свои документы Word в наших партнеров по рекрутингу CMS при вставке новых списков вакансий, оставляя WordML в моем канале. Я считаю, что этот WordML вызывает проблемы с функцией Feedburner BrowserFriendly; которые мы хотим показать, чтобы облегчить людям подписку. Поэтому мне нужно удалить разметку WordML в фиде.

У кого-нибудь есть опыт? Может ли кто-нибудь указать мне на хорошее решение этой проблемы?

Предпочтительно; Я хотел бы указать на решение в .Net (VB или C# в порядке) и/или XSL.

Любые советы по этому поводу приветствуются.

Спасибо.

ответ

1

Я еще не работал с 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> 

Начало и конец таблицы стилей остается в качестве упражнения для кодировщика.

0

Я хотел бы сделать что-то вроде этого:.

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()); 
} 

Это будет выглядеть для символов в ссылке, (которые являются специальными символами слова, которые запутались все, и заменяет их с ASCII equivelents

0

Джефф Этвуд писал о том, как сделать это некоторое время назад. Его пост содержит некоторые C# код, который будет очищать WordML.

http://www.codinghorror.com/blog/archives/000485.html

+0

Статья Джеффа посвящена очистке отвратительного HTML, который генерирует Word, а не удалению элементов XML из файла WordML. – 2009-11-05 17:02:42

Смежные вопросы