从字符串中删除WordML

时间:2008-10-27 21:59:21

标签: c# asp.net xml rss xslt

我的任务是为我公司的职位列表构建一个可访问的RSS源。我已经从我们的招聘合作伙伴处获得了RSS源;所以我正在将他们的RSS XML转换为我们自己的代理RSS提要,以添加额外的数据,同时限制提要中的项目数量,以便我们列出最新的工作。

RSS通过feedvalidator.org验证(带警告);但问题是这个。不幸的是,无论我多少次告诉他们不要;我的公司人力资源团队在插入新的职位列表时将Word文档直接复制并粘贴到我们的招聘合作伙伴CMS中,将WordML留在我的Feed中。我相信这个WordML会导致Feedburner的BrowserFriendly功能出现问题;我们想要展示,以便人们更容易订阅。因此,我需要删除Feed中的WordML标记。

有人有这方面的经验吗?有人能指出我解决这个问题的好方法吗?

优选地;我想指出.Net(VB或C#很好)和/或XSL的解决方案。

非常感谢任何有关此建议。

感谢。

3 个答案:

答案 0 :(得分: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>

样式表的开头和结尾留作编码员的练习。

答案 1 :(得分: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());
}

这将查找引用中的字符(这些Word特殊字符会弄乱所有内容并用ASCII等效项替换它们。

答案 2 :(得分:0)

Jeff Attwood在不久前的博客中谈到了如何做到这一点。他的帖子包含一些将清理WordML的c#代码。

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