2017-06-02 8 views
1

docx XMLファイル内の子ノードにアクセスする際にdom4jパーサを使用する際に助けが必要です。docxファイル内の子ノードにアクセスしようとしています

私が使用してノードリストを作成している

List<Node> nodes = document.selectNodes("/w:document/w:body/w:tbl/w:tr/w:tc"); 

しかし、イムはそのselectNodeグループの子ノードを見つける方法を知りません。 docxファイルは、Imの編集とDBの更新を試行している一覧です。

私はデータがどの列に知っておく必要があるので、私はこのレベルに滞在する必要があります。 私はレベルでGetChildしたい数量

に取得する必要があります。どの列にもデータがないかどうかを判断する必要があります。

は、現在のコンテキストノードの子ノードを見つけるためにあなたの助けを <

w:tc> 
    <w:tcPr> 
     <w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/> 
     <w:tcBorders> 
      <w:left w:val="single" w:sz="4"/> 
      <w:top w:val="single" w:sz="4"/> 
     </w:tcBorders> 
     <w:vAlign w:val="top"/> 
    </w:tcPr> 
    <w:p> 
     <w:pPr> 
      <w:pStyle w:val="Style2"/> 
      <w:framePr w:w="10805" w:wrap="notBeside" w:vAnchor="text" w:hAnchor="text" w:xAlign="center" w:y="1"/> 
      <w:widowControl w:val="0"/> 
      <w:keepNext w:val="0"/> 
      <w:keepLines w:val="0"/> 
      <w:shd w:val="clear" w:color="auto" w:fill="auto"/> 
      <w:bidi w:val="0"/> 
      <w:jc w:val="left"/> 
      <w:spacing w:before="0" w:after="0" w:line="190" w:lineRule="exact"/> 
      <w:ind w:left="200" w:right="0" w:firstLine="0"/> 
     </w:pPr> 
     <w:r> 
      <w:rPr> 
       <w:rStyle w:val="CharStyle15"/> 
      </w:rPr> 
      <w:t>Quantity</w:t> 
     </w:r> 
    </w:p> 
</w:tc> 
+0

解析しているXMLのスニペットを教えてください。どの子ノードを選択する必要がありますか? – tnas

答えて

0

をありがとう、あなたは'/' charで開始されていないRelativeLocationPathを指定する必要があります。

for (Iterator iterator = nodes.iterator(); iterator.hasNext();) { 
    Node node = (Node) iterator.next(); 
    node.selectNodes("w:tcPr");//="child::w:tcPr", child is the default axis of location path 
    //The API return child nodes `w:tcPr` 
} 

node.selectNodes( "W:TCPR/W:SHD")。

APIリターン1ノード[/ w:document/w:body/w:tbl/w:tr/w:tc/w:tcPr/w:shd];

node.selectNodes( "*/w:shd"); //コンテキストノードの子孫「w:shd」を選択

APIリターン1ノード[w:tcPr/w:shd];ノードw:p/w:shdが存在する場合は、そのノードが選択されます。

node.selectNodes( "self :: node()// w:shd"); //のXPath = "自己::ノード()/子孫、または自己::ノード()/ W:SHD"

APIリターン2つのノード[w:tcPr/w:shdw:p/w:pPr/w:shd]。ノードw:shdが存在する場合は、そのノードが選択されます。

node.selectNodes( "* // W:SHD"); //のXPath = "子::ノード()/子孫、または自己::ノード()/ W:SHD"

APIは2ノードも返します。[w:tcPr/w:shdw:p/w:pPr/w:shd];しかし、ノードw:shdが存在する場合は、NOTが選択されます。

+0

回答を選択するにはどうすればよいですか? – TYD

+0

どういう意味ですか?テキストノード '' Quantity ''を取得したい場合、' 'node.selectSingleNode(" w:p/w:r/w:t ")。getText()'を呼び出すことができます。 –

関連する問題