0

スタックオーバーフローのプログラミング方法を学ぶThroghoutは、豊富な情報を提供し、さまざまなことを理解する方法を学ぶための定番となっています。しかし、この問題のために、数日検索して手ぶらで出てきた後、最初の投稿を作成することにしました。

問題は、XpathのNode.setTextContentを使用してJava文字列からXMLファイルに複数行の値を作成することです。Xpathが要素ノードとして報告するXMLファイルの値タグへの書き込み。これで、文字列値をノードに書き込むときに、実際に文字列値がノードに書き込まれますが、APIによるsetTextContentメソッドは文字列内の何も解析せず、テキストを書き込むだけなので、長い文字列値は1つだけです。 。私が書き込もうとしているデータの例は次のとおりです:(編集2-16、フォーマットオプションがメインの投稿を表示していないことに気づきました)以下のようにフォーマットされ、通り、都市の州、電話が以下の情報のように分類されています(行の間にスペースを入れずに)、最初のxmlコード例にリストされている形式と一致させます。

496ビビッドアベニュー

いくつかの都市、州、11111

111-222-3333

java文字列がxmlファイルに書き込まれると、次のように入力されます。496 Vivid Ave. Some City、State、11111 111-222-3333

親プログラム(私のJavaアプリではない)から作成されたノードの例は次のとおりです。

<field sid="ADDRESS">
     <itemlocation>
        <ae>
           <ae>absolute</ae>
           <ae>33</ae>
           <ae>168</ae>
        </ae>
     </itemlocation>
     <value>496 Vivid Ave.
Some City, State, 11111
111-222-3333</value>
     <borderwidth>0</borderwidth>
     <fontinfo>
        <ae>Times New Roman</ae>
        <ae>10</ae>
        <ae>plain</ae>
     </fontinfo>
     <scrollhoriz>wordwrap</scrollhoriz>
     <scrollvert>fixed</scrollvert>
     <format>
        <ae>string</ae>
        <ae>optional</ae>
     </format>
     <acclabel>6.  leave address.
enter street, city, state, zip code and phone number.
</acclabel>
     <size>
        <ae>35</ae>
        <ae>3</ae>
     </size>
     <previous>FIELD5</previous>
     <next>ORDINARY</next>
  </field>

アプリを実行すると、生のxmlデータの出力は次のようになります。

<field sid="ADDRESS">
     <itemlocation>
        <ae>
           <ae>absolute</ae>
           <ae>33</ae>
           <ae>168</ae>
        </ae>
     </itemlocation>
     <value>496 Vivid Ave. Some City, State, 11111 111-222-3333</value>
     <borderwidth>0</borderwidth>
     <fontinfo>
        <ae>Times New Roman</ae>
        <ae>10</ae>
        <ae>plain</ae>
     </fontinfo>
     <scrollhoriz>wordwrap</scrollhoriz>
     <scrollvert>fixed</scrollvert>
     <format>
        <ae>string</ae>
        <ae>optional</ae>
     </format>
     <acclabel>6.  leave address.
enter street, city, state, zip code and phone number.
</acclabel>
     <size>
        <ae>35</ae>
        <ae>3</ae>
     </size>
     <previous>FIELD5</previous>
     <next>ORDINARY</next>
  </field>

改行とキャリッジリターンのエスケープ文字を文字列に手動で入力しようとしましたが、値ではなくコード値を入力するだけです。

親プログラムは私のJavaコードを読み取るので、住所と電話番号を別々の行に分解しません。

私が使用しているJavaは次のようになります。

public void setFieldValue(String sid, String value){
    Node resultNode = null;
    XPath xPath = XPathFactory.newInstance().newXPath();

    try{

        resultNode = (Node)xPath.evaluate(makeFieldString(sid), doc,XPathConstants.NODE);

    }catch(XPathExpressionException xpee){System.out.println(xpee + "Could not retrive node");}
     if (resultNode != null){

        resultNode.setTextContent(value);

    }
    else System.out.println("Epic fail");

    }

public String makeFieldString(String sid){
    String output=null;
    if (sid.equals("POPUP2")){
        output="//popup[@sid='" + sid + "']/value";
    }

    else{
       output=  "//field[@sid='" + sid + "']/value";
    }
    return output;
}

setTextContentが認識する改行をJava文字列に含める方法について誰かがアイデアを持っているなら、私はそれを理解するでしょう。テキストの正規化と空白データを使用するというアイデアを投げかけましたが、それを実装する方法がよくわからず、これらのメソッドがsetTextContentメソッドから削除されるかどうかもわかりません。

助けてくれてありがとう!私は私の質問で炎上しないように十分に明確であったことを願っています!

4

1 に答える 1

0

http://xpath.alephzarro.com/content/cheatsheet.htmlでxpather cheetsheet を見つけましたが、これは正規表現で特殊文字を示していましたが、Xpath は改行の unicoode 値を挿入せず、new の \n を認識しました。行が修正され、住所ブロックが正しくフォーマットされるようになりました。

于 2013-02-16T16:09:45.010 に答える