2

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

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

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

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

非常感谢您对此的任何建议。

谢谢。

4

3 回答 3

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>

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

于 2008-10-28T13:57:04.457 回答
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 等效字符替换它们。

于 2008-10-27T22:14:54.687 回答
0

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

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

于 2008-10-28T09:56:56.623 回答