2016-04-22 7 views
1

:議論の便宜上Atom XMLフィードの解析時に、競合するCDATAとエンティティのエスケープされた要素をどのように処理する必要がありますか? AtomフィードパーサがフィードにXMLの次の行を処理する必要がありますどのように

<title type="html"><![CDATA[Johnson &amp; Johnson]]></title> 

は、本来意図したテキストが実際Johnson & Johnsonにあったことを前提としています。私はこの問題について、このonline discussion渡って来て、2つの異なる意見があるように見えた:

  1. Opinion #1 - claims that this content is double-encoded。テキスト「Johnson & Johnson」テキストはエンティティエスケープされ、CDATAセクションにラップされて再びエンコードされます。彼は、XML specがCDATAでエンコードされたデータを処理する方法であるため、よく動作するxmlパーサーはJohnson &amp; Johnsonを返すと述べています。

  2. Opinion #2 - claims that the Atom spec takes precedent。彼はCDATAがパススルーとして機能すると述べている。 Johnson &amp; JohnsonJohnson &amp; Johnsonとなる。これが単なるXML文書であれば、そこでは終了します。しかし、それはAtomであるため、正しい動作を判断するためにはAtom specを調べる必要があります。アトム仕様では、type="html"の要素にエンティティがエスケープされたhtmlが含まれていると記載されています。したがって、私たちは自由に解読する必要があります。

どれが実際に正しいのですか?適切なAtom XMLパーサーは、この特定の状況を考慮して、 Johnson & JohnsonまたはJohnson &amp; Johnsonを生成する必要がありますか?

答えて

0

CDATAは文字データです - 間のパーサーは完全に無視されます。 xmlは&を扱うことができないので、それが必要です。したがって、「ダブルエンコーディング」はありません。パーサは、間にあるものを無視して、クローズタグにスキップします。私は実際のネスティングを可能にするパーサを見いだすことはありませんでした(完全なCDATAオープンタグとクローズタグを埋め込みました)。

0

CDATAマーカー間のコンテンツはタグのエンティティで解析されないため、テキストノードの解析された値はJohnson &amp; Johnsonです。

属性にはtype="html"と記載されているため、HTMLとして解析する必要があります。

あなたがWebページとしてこれを表現していた場合、あなたは書くかもしれない:

<h1>Johnson &amp; Johnson</h1> 

それはtype="text"は、あなたがあなたに与えているだろうHTMLとしてプレーンテキストエンコードする必要があったと述べていた場合:

<h1>Johnson &amp;amp; Johnson</h1> 
+0

あなたの声明では「それはその後、HTMLとして解析されなければならないので、」曖昧さが私にとっての出番です。もし、CDATAがなければ、通常は 'type =" html "要素のAtomライブラリがその要素のテキストをhtmlでデコードするでしょうか?CDATAにラップされた要素テキストをhtmlでデコードする必要がありますか? – mmcdole

+0

* Atomライブラリ(通常type = "html"の場合)* - Atomライブラリは使用しないでください.HTMLレンダラは必要です。 – Quentin

+0

仕様が仕様どおりにエスケープされていると明示されている場合、フィードパーサライブラリはそれを受け取り、 'type =" html "'とマークされた要素をエスケープ解除しないでください。 'として定義されているフィードから' Title'を返すようにPythonの 'feedparser'ライブラリやPHPの' Simplepie'ライブラリに問い合わせると、 '<title type =" html ">のようになります。例<p>タイトル</p > 'の場合、それらはすべて、例文

タイトル

'を返します。この質問は、CDATA要素が、エスケープされていない形式にデータを解析するときに行う典型的なアンエスケープ処理を回避するかどうかを中心にしています。 – mmcdole

0

両方を意見が正しい:

  • タイトルは、Johnson & Johnsonです。
  • HTMLとしてエンコードされたタイトルはJohnson &amp; Johnson
  • XMLにHTMLとしてエンコードタイトルは<![CDATA[Johnson &amp; Johnson]]>
関連する問題