Размещение контента: закодировано в RSS-канал с использованием ROME - PullRequest
2 голосов
/ 27 марта 2012

Я пытаюсь поместить некоторое содержимое HTML в теги <content:encoded>, используя ROME и его модули . До сих пор я успешно поместил mediaRSS и geoRSS в канал, но мой контент не отображается.

Вот мой код:

ContentModule contentModule = new ContentModuleImpl();
List<ContentItem> contents = new ArrayList<ContentItem>();
List<String> contentValueDOM = new ArrayList<String>();
ContentItem content = new ContentItem();

content.setContentValue("<p>Some text here</p>");
content.setContentEncoding("text/html");
content.setContentAbout("Paragraph");
content.setContentValueDOM(contentValueDOM);
contents.add(content);

contentModule.setContents(contents);
contentModule.setContentItems(contents);
entry.getModules().add(contentModule);

А вот и мой вывод

<item>
  <title>Example page</title>

  <link>http://www.example.com/news/2012/march/example-page.html</link>
  <description>Introduction</description>
  <category>news</category>
  <pubDate>Tue, 27 Mar 2012 08:18:52 GMT</pubDate>
  <guid>http://www.example.com/news/2012/march/example-page.html</guid>
  <dc:date>2012-03-27T08:18:52Z</dc:date>

  <content:items>
    <rdf:Bag>
      <rdf:li>
        <content:item rdf:about="Paragraph">
          <content:encoding rdf:resource="text/html" />
          <rdf:value />
        </content:item>
      </rdf:li>
    </rdf:Bag>

  </content:items>
  <geo:lat>52.09161879618039</geo:lat>
  <geo:long>5.1141280958007655</geo:long>
  <media:content medium="image" fileSize="16029" height="500" type="image/jpeg" width="399" url="http://www.example.com/binaries/content/gallery/image.jpg">
    <media:description type="plain/text" />
    <media:thumbnail url="http://www.example.com/binaries/content/gallery/thumbnail/image.jpg" />
  </media:content>
  <media:content medium="video" expression="full" type="application/x-shockwave-flash" isDefault="true" url="http://www.youtube.com/v/jQq4ju-vupY?rel=0">

    <media:player url="http://www.youtube.com/v/jQq4ju-vupY?rel=0&amp;feature=youtube_gdata_player" width="520" height="390" />
  </media:content>
</item>

1 Ответ

2 голосов
/ 27 марта 2012

Кажется, это работает:

List<String> contents = new ArrayList<String>();
contents.add("<p>Some text here</p>");
ContentModule module = new ContentModuleImpl();
module.setEncodeds(contents);        
entry.getModules().add(module); 

Однако вышеприведенный вывод выводит канал, используя Обновленный синтаксис вместо Исходный синтаксис.С обновленным синтаксисом вы получите что-то похожее (содержит tag):

<item>
  <content:encoded><![CDATA[<p>Some text here</p>]]></content:encoded>
</item>

Когда я попытался использовать ContentItem , который поддерживает оригинальный синтаксис (с использованием modules-0.3.2), как вы, я обнаружил, что ContentModuleGenerator требует, чтобы setContentValueDOM содержало значение содержимого для вывода.Также представляется, что этот контент должен быть castable to org.jdom.Content (например, вам необходимо вызвать setContentValueDOM (Список) ).Так как org.jdom.CDATA является подклассом org.jdom.Content , вы можете сделать что-то вроде этого:

ContentModule contentModule = new ContentModuleImpl();                
List<ContentItem> contents = new ArrayList<ContentItem>();
List<Content> contentValueDOM = new ArrayList<Content>();        
String value = "<p>Some text here</p>";
ContentItem content = new ContentItem();
content.setContentValue(value);
content.setContentAbout("Paragraph"); 
content.setContentFormat("http://www.w3.org/TR/html4/");
CDATA valueElement = new CDATA(value);
contentValueDOM.add(valueElement);
content.setContentValueDOM(contentValueDOM);      
contents.add(content);
contentModule.setContents(contents);
contentModule.setContentItems(contents);
entry.getModules().add(contentModule);

, который производит:

<item>
  <title>Example page</title>
  <content:items>
    <rdf:Bag>
      <rdf:li>
        <content:item rdf:about="Paragraph">
          <content:format rdf:resource="http://www.w3.org/TR/html4/" />
          <rdf:value><![CDATA[<p>Some text here</p>]]></rdf:value>
        </content:item>
      </rdf:li>
    </rdf:Bag>
  </content:items>
</item>

Если вы измените приведенный выше пример кода, заменив раздел CDATA элементом и добавив соответствующий формат и информацию о кодировке, таким образом:

//content.setContentFormat("http://www.w3.org/TR/html4/");
//CDATA valueElement = new CDATA(value);
content.setContentFormat("http://www.w3.org/1999/xhtml");
content.setContentEncoding("http://www.w3.org/TR/REC-xml#dt-wellformed");
Element valueElement = new Element("p");
valueElement.setText("Some text here");

, вы получите XML, показывающий тег:

<item>
  <title>Example page</title>
  <content:items>
    <rdf:Bag>
      <rdf:li>
        <content:item rdf:about="Paragraph">
          <content:format rdf:resource="http://www.w3.org/1999/xhtml" />
          <content:encoding rdf:resource="http://www.w3.org/TR/REC-xml#dt-wellformed" />
          <rdf:value>
            <p>Some text here</p>
          </rdf:value>
        </content:item>
      </rdf:li>
    </rdf:Bag>
  </content:items>
</item>
...