2011-12-16 20 views
2

Nokogiriを使用して.docxファイルから抽出したdocument.xmlファイルを解析していて、名前が「w:val」などの属性値を取得する必要があります。Nokogiriを使用して名前空間で属性値を取得

これは、ソースXMLのサンプルです:

<w:document> 
    <w:body> 
    <w:p w:rsidR="004D5F21" w:rsidRPr="00820E0B" w:rsidRDefault="00301D39" pcut:cut="true"> 
     <w:pPr> 
     <w:jc w:val="center"/> 
     </w:pPr> 
    </w:body> 
</w:document> 

これはコードのサンプルです:

require 'nokogiri' 

doc = Nokogiri::XML(File.open(path)) 
    doc.search('//w:jc').each do |n| 
    puts n['//w:val'] 
    end 

コンソールで何も、唯一の空行はありません。属性の値はどのように取得できますか?

答えて

3

を文書がその名前空間の宣言が欠落している、と鋸山ではありませんそれに満足しています。

puts doc.at('jc')['val'] 

意志出力:名前空間の問題を中心にステップ実行することができ、XPathのではなく、鋸山のCSSのアクセサを使用することにより

 
puts doc.errors 
Namespace prefix w on document is not defined 
Namespace prefix w on body is not defined 
Namespace prefix w for rsidR on p is not defined 
Namespace prefix w for rsidRPr on p is not defined 
Namespace prefix w for rsidRDefault on p is not defined 
Namespace prefix pcut for cut on p is not defined 
Namespace prefix w on p is not defined 
Namespace prefix w on pPr is not defined 
Namespace prefix w for val on jc is not defined 
Namespace prefix w on jc is not defined 
Opening and ending tag mismatch: p line 3 and body 
Opening and ending tag mismatch: body line 2 and document 
Premature end of data in tag document line 1 

:あなたはdocためerrors方法を確認する場合は、あなたのようなものが表示されます:

center 

あなたは、複数のjcのノードを反復searchまたはそのaliaseのいずれかを使用する必要がある場合あなたが以前にしたことに似ています。

+0

"ドキュメントに名前空間宣言がありません"。 ノコギリで新しく、なぜ教えてくれますか? – avy

+0

XML名前空間がない理由はわかりません。おそらく、サンプルXMLは完全ではないか、正しくコピーされていません。おそらく、XMLが生成されたときに不正な形式になっている可能性があります。 –

関連する問題