0

私は基本的に、必要なデータを含むDOMオブジェクトにこだわっており、それを文字列に出力しようとしています。ここでは、xml ファイルを解析するために使用しているコードを示します。

public ORGRTools insertUserNameAndPassword(String userName, String password)
{
    try {
        DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
        docBuilder = factory.newDocumentBuilder();
        dom = docBuilder.parse (new File("/mnt/sdcard/Commands.xml"));
        NodeList items = dom.getElementsByTagName("login");
        for (int i = 0; i < items.getLength(); i++) {
                    Node item = items.item(i);
                    NodeList properties = item.getChildNodes();
                    for (int j = 0; j < properties.getLength(); j++) {
                        Node property = properties.item(j);
                        String name = property.getNodeName();
                        if (name.equalsIgnoreCase("userName")) {
                            property.getFirstChild().setNodeValue(userName);
                        }
                        if (name.equalsIgnoreCase("password")) {
                            property.getFirstChild().setNodeValue(password);
                        }
                    }
        }
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        //invalid character in xml
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return this;
}

そうは言っても、上記の前のコードのメンバー変数 dom を使用して文字列表現を取得しようとする次の関数があります。

public String serialize()
{
     try
        {
           DOMSource domSource = new DOMSource(dom);
           StringWriter writer = new StringWriter();
           StreamResult result = new StreamResult(writer);
           TransformerFactory tf = TransformerFactory.newInstance();
           Transformer transformer = tf.newTransformer();
           transformer.transform(domSource, result);
           String retVal= writer.toString();
           return retVal;
        }
        catch(TransformerException ex)
        {
                   //exception here but does not print stack trace... weird
           ex.printStackTrace();
           return null;
        }
}

ただし、次の例外が発生します(コメントを参照)。誰が何が起こっているのか手がかりを持っていますか? 文字列への変換が失敗するのはなぜですか? 私はこれで数時間立ち往生しているので、どんな助けでもいいでしょう. どの API レベルでも問題ありません。

ありがとう!--編集-- これが私が処理しようとしている構造です。基本的には、これらのモデルの 1 つを .apk と共にインストールし、これらのモデルをサーバーと通信させるという考え方です。したがって、ユーザー資格情報データを入力する必要があります。

<commands>
<login>
    <userName>itemstr</userName>
    <password>itemstr</password>
</login>
<analyse>
    <imageName>itemstr</imageName>
    <imageHeight>itemnum</imageHeight>
    <imageWidth>itemnum</imageWidth>
    <recordID>itemstr</recordID>
</analyse>
<retrieve>
    <record>itemnum</record>
</retrieve>

4

1 に答える 1

0

単純な xml フレームワークを参照すると、xml をオブジェクトにシリアル化する作業がより簡単になります。

これは、その使用法について説明するためのサンプルです...

単純なオブジェクトの シリアル化 オブジェクトを XML にシリアル化するには、一連の注釈をそのオブジェクト内に配置する必要があります。これらの注釈は、オブジェクトをシリアライズする方法をパーシスタに伝えます。たとえば、以下に示すクラスを取り上げます。ここには 3 つの異なる注釈があります。1 つはルート要素の名前を記述するために使用され、もう 1 つは XML メッセージ要素を記述するために使用され、id 属性の最後の注釈です。

@Root
public class Example {

   @Element
   private String text;

   @Attribute
   private int index;

   public Example() {
      super();
   }  

   public Example(String text, int index) {
      this.text = text;
      this.index = index;
   }

   public String getMessage() {
      return text;
   }

   public int getId() {
      return index;
   }
}

上記のオブジェクトのインスタンスをシリアライズするには、Persister が必要です。永続化オブジェクトには、注釈付きオブジェクトのインスタンスと出力結果 (この例ではファイル) が与えられます。永続化オブジェクトを使用すると、他の出力形式も可能です。

Serializer serializer = new Persister();
Example example = new Example("Example message", 123);
File result = new File("example.xml");

serializer.write(example, result);

これがあなたの質問に答えることを願っています..

于 2012-03-16T02:28:36.277 に答える