2017-05-12 12 views
0

docxファイルのXML変数をバインドしたい(私のvarはそのパターン$ varname $にあります)。だから私はList<Object>を返す関数を使って、ドキュメント上の検索結果を得る。DOCX4J XML JAXBNodesの "値"を取得する方法

String xpath = "//w:r[w:t[starts-with(text(), '$')]]"; 
List<Object> list = this.getDocumentPart().getJAXBNodesViaXPath(xpath, false); 
if(!list.isEmpty()){ 
    for(int i = 0; i < list.size(); ++i){ 
      System.out.println(list.get(i).getClass()); 
    } 
} 

印刷の結果は次のとおりです。

クラスorg.docx4j.wml.R
クラスorg.docx4j.wml.R
クラスorg.docx4j.wml.R

しかし、私はマップと比較するために "値"すなわち$ varname $を得たいと思っています(キーは各変数の名前です)?

答えて

0

私が見つけ解決策:

if(!list.isEmpty()){ 
    List<Object> listObjNode; 
    for(int i = 0; i < list.size(); ++i){ 
     List<Object> r = ((R)list.get(i)).getContent(); 
     for(int j = 0; j < r.size(); ++j){ 
      javax.xml.bind.JAXBElement jaxb = (javax.xml.bind.JAXBElement)r.get(j); 
      org.docx4j.wml.Text t = (org.docx4j.wml.Text)jaxb.getValue(); 
      System.out.println(t); 
     } 
    } 
} 
0

あなたのXMLの形式は、おそらく次のとおりです。

<w:r> 
    <w:t>$varname$</w:t> 
</w:r> 

必ずしもそうとは限りません。また、他のコンテンツを持つこともできるので、そのコンテンツモデルはリストです。

あなただけのいくつかの他のプレーンテキストでの$ VARNAME $を交換したい場合は、使用した方が良いと思います。それは、テキストオブジェクトを返しますので、

String xpath = "//w:t[starts-with(text(), '$')]"; 

を。あなたは現在の価値を得て、次に何かにそれを設定します。

現在の方法では、Rのコンテンツリスト(オブジェクトをRにキャストすることから始めます)を取得し、各アイテムを調べて$ varname $を含むw:tであるかどうかを調べる必要があります。

関連する問題