2

私は自分の会社の求人情報用にアクセス可能なRSSフィードを作成する任務を負っています。私はすでに採用パートナーからのRSSフィードを持っています。そこで、RSS XMLを独自のプロキシRSSフィードに変換して、データを追加し、フィード内のアイテム数を制限して、最新のジョブを一覧表示します。

RSSはfeedvalidator.orgを介して検証されます(警告付き)。しかし、問題はこれです。残念ながら、何度言ってもそうしないように言っても。私の会社のHRチームは、新しい求人情報を挿入するときに、Wordドキュメントを直接コピーして採用パートナーのCMSに貼り付け、WordMLをフィードに残します。このWordMLがFeedburnerのBrowserFriendly機能で問題を引き起こしていると思います。人々が購読しやすくするために表示したいと思います。したがって、フィード内のWordMLマークアップを削除する必要があります。

誰かがこれをした経験がありますか?誰かが私にこの問題の良い解決策を教えてもらえますか?

好ましい; .Net(VBまたはC#で問題ありません)および/またはXSLのソリューションを紹介したいと思います。

これに関するアドバイスは大歓迎です。

ありがとう。

4

3 に答える 3

1

私はまだ WordML を扱ったことはありませんが、その要素が RSS とは異なる名前空間にあると仮定すると、XSLT を使用するのは非常に簡単なはずです。

基本的な恒等変換 (入力ドキュメントのすべてのノードを「そのまま」出力ツリーに追加するスタイルシート) から始めます。次の 2 つのテンプレートが必要です。

  <!-- 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>

上記の 2 つのテンプレートのみを含むスタイルシートを使用した変換は、エンティティの置換など、標準に準拠した 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

Jeff Attwood は、少し前にこれを行う方法についてブログを書いています。彼の投稿には、WordML をきれいにする c# コードが含まれています。

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

于 2008-10-28T09:56:56.623 に答える
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 文字に置き換える Word の特殊文字です。

于 2008-10-27T22:14:54.687 に答える