0

blobstoreに保存されているXMLファイルを解析する必要があります。それ、どうやったら出来るの?

これは私が今までやってきたことです:

FileService fileService = FileServiceFactory.getFileService();
AppEngineFile file = fileService.getBlobFile(new BlobKey(key));

パッケージを使用してXMLファイルを解析できませんjavax.xmlか?そのパッケージ内のクラスを実行する場合は、java.io.Fileオブジェクトの参照が必要です。しかし、私はそれを持っていません。

これは私が今までやってきたことです:(サーバーではなくローカルで)

         File blobKeys = new File("/home/non-admin/NetBeansProjects/Personal Site_Testers/web/xml/xml_1.xml");
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(blobKeys);
        Element root = doc.getDocumentElement();

        Element firstName = doc.createElement("first-name");
        firstName.setTextContent(name);

        root.appendChild(firstName);

        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer transformer = tf.newTransformer();
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(new File("/home/non-admin/NetBeansProjects/Personal Site_Testers/web/xml/xml_1.xml"));
        transformer.transform(source, result);

注:blobstoreにアップロードされるxmlファイルは3つあります。これらのxmlファイルにはルートタグがあります。xml参照を取得して解析し、要求に応じて子ノードを数回追加したいと思います。

4

1 に答える 1

0

* .xmlを解析したい場合は、アプリエンジンで使用するjdom2の方が便利で、機能すると思います。

ただし、FileService APIドキュメントを読み取ることはでき、ファイルの読み取りと書き込みの方法の例があります。InputStreamまたはReaderを取得できる場合は、javax.xmlを使用してInputStreamまたはReaderのxmlコンテンツを解析できます。

    FileService fileService = FileServiceFactory.getFileService();
    AppEngineFile readableFile = new AppEngineFile("your_file_name");
    FileReadChannel readChannel = fileService.openReadChannel(readableFile,
            false);
    InputStream input = Channels.newInputStream(readChannel);

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(input);

    Element root = doc.getDocumentElement();

    Element firstName = doc.createElement("first-name");
    firstName.setTextContent("content");

    root.appendChild(firstName);
    // Now write
    GSFileOptionsBuilder optionsBuilder = new GSFileOptionsBuilder()
            .setBucket("mybucket").setKey("myfile")
            .setMimeType("text/html").setAcl("public_read")
            .addUserMetadata("myfield1", "my field value"); // change as
                                                            // your need
    AppEngineFile writableFile = fileService.createNewGSFile(optionsBuilder
            .build());
    FileWriteChannel writeChannel = fileService.openWriteChannel(
            writableFile, false);
    OutputStream output = Channels.newOutputStream(writeChannel);

    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer transformer = tf.newTransformer();
    DOMSource source = new DOMSource(doc);
    transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    StreamResult result = new StreamResult(output);
    transformer.transform(source, result);
于 2012-08-30T13:54:22.720 に答える