Удаление WordML из строки

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

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

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

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

Мы очень ценим любые советы по этому поводу.

Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
788
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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-кода, который генерирует Word, а не удалению элементов XML из файла WordML.

Chris Zwiryk 05.11.2009 20:02

Спрашивающий говорил, что контент, который копируется и вставляется из слова, содержит множество нежелательных тегов HTML. Код Джеффа удалит их.

d4nt 09.11.2009 13:53
Ответ принят как подходящий

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

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

Другие вопросы по теме