我的任务是为我公司的招聘信息创建一个可访问的RSS提要。我已经有了我们招聘合作伙伴的RSS提要;所以我将他们的RSS XML转换为我们自己的代理RSS提要,以添加额外的数据,并限制提要中的项目数,以便我们列出最新的工作。
RSS通过feedvalidator.org (带有警告)进行验证;但问题是这样的。不幸的是,无论我告诉他们多少次不要这样做,我公司的人力资源团队在插入新的工作列表时,都会直接将他们的Word文档复制并粘贴到招聘伙伴的CMS中,并在我的订阅源中留下WordML。我认为这个WordML导致了Feedburner的BrowserFriendly功能的问题;我们希望显示出来,让人们更容易订阅。因此,我需要删除提要中的WordML标记。
有谁有这方面的经验吗?谁能给我指个解决这个问题的好办法?
最好是;我希望得到一个用.Net (VB或C#都可以)和/或XSL的解决方案。
这方面的任何建议都是非常感谢的。
谢谢。
发布于 2008-10-28 13:57:04
我还没有使用过WordML,但是假设它的元素与RSS在不同的名称空间中,那么使用它应该非常简单。
从基本的标识转换开始(将输入文档中的所有节点“按原样”添加到输出树的样式表)。您需要以下两个模板:
<!-- 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-27 22:14:55
我会这样做:
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等效项替换它们。
发布于 2008-10-28 09:56:57
杰夫·阿特伍德不久前写了一篇关于如何做到这一点的博客。他的帖子包含了一些可以清理WordML的c#代码。
http://www.codinghorror.com/blog/archives/000485.html
https://stackoverflow.com/questions/241526
复制相似问题