私はJavaを使用してURLからRSSフィードを読み取り、を使用してDOMツリーを解析し、javax.xml.parsers.DocumentBuilder.parse(InputStream)
それにいくつかの変更を加えてから、を使用して結果をシリアル化して出力していorg.w3c.dom.ls.LSSerializer.write(Node,LSOutput)
ます。
私が読んでいるフィードはhttp://www.collaborationblueprint.com.au/blog/rss.xmlです。
フィードは整形式のXMLですが、シリアル化の結果はそうではありません。
これまでのすべての試みで、CDataセクションは1組の角かっこを削除することで壊れています。
たとえば、ソースに次の要素が含まれている場合:
<description> <![CDATA[<p>一部のテキスト</p>]]> </ description>
シリアル化された結果は次のようになり、整形式ではありません。
<description> <![CDATA<p>テキスト</p>]> </ description>
私のコードは以下の通りです。LotusDominoエージェントに含まれています。
この問題を解決するにはどうすればよいですか?
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLDecoder;
import java.util.HashMap;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.bootstrap.DOMImplementationRegistry;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSOutput;
import org.w3c.dom.ls.LSSerializer;
import lotus.domino.*;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
org.w3c.dom.Document newDoc;
DocumentBuilderFactory builderFactory;
DocumentBuilder builder;
Element docElem,tmpElem;
Node tmpNode;
Session session=getSession();
AgentContext agentContext=session.getAgentContext();
// Put URL arguments into a HashMap.
Document doc=agentContext.getDocumentContext();
String[] query=doc.getItemValueString("Query_String").split("&");
HashMap<String,String> queryMap=new HashMap<String,String>(query.length);
for (int i=0; i<query.length; i++) {
int j=query[i].indexOf('=');
if (j<0) queryMap.put(query[i],"");
else queryMap.put(query[i].substring(0,j),URLDecoder.decode(query[i].substring(j+1),"UTF-8"));
}
// Get the "src" URL argument - this is the URL we're reading the feed from.
String urlStr=queryMap.get("src");
if (urlStr==null || urlStr.length()==0) {
System.err.println("Error: source URL not specified.");
return;
}
URL url;
try {
url=new URL(urlStr);
} catch (Exception e) {
System.err.println("Error: invalid source URL.");
return;
}
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
InputStream is=conn.getInputStream();
builderFactory=DocumentBuilderFactory.newInstance();
builder=builderFactory.newDocumentBuilder();
// Create a DocumentBuilder and parse the XML.
builder=builderFactory.newDocumentBuilder();
try {
newDoc=builder.parse(is);
is.close();
conn.disconnect();
} catch (Exception e) {
is.close();
conn.disconnect();
System.err.println("XML parse exception: "+e.toString());
return;
}
docElem=newDoc.getDocumentElement();
docElem.setAttribute("xmlns:ibmwcm","http://purl.org/net/ibmfeedsvc/wcm/1.0");
PrintWriter pw=getAgentOutput();
pw.println("Content-type: text/xml");
DOMImplementationRegistry registry=DOMImplementationRegistry
.newInstance();
DOMImplementationLS impl=(DOMImplementationLS)registry
.getDOMImplementation("LS");
LSOutput lso=impl.createLSOutput();
lso.setCharacterStream(pw);
LSSerializer writer=impl.createLSSerializer();
writer.write(newDoc,lso);
} catch (Exception e) {
e.printStackTrace();
}
}
}