2016-06-01 11 views
0

は、次のFODTファイルの抽出からのコードの抜粋です:抽出データ

<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" 
xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" 
xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" 
xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" 
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text"> 

私は、各名前空間の内容を分けたいです。たとえば、xmlns:office = "urn:oasis:names:tc:opendocument:xmlns:office:1.0"、xmlns:style = "urn:oasis:names:tc:opendocument:xmlns:style:1.0"等を含む名前空間自体。

lxmlを使ってどのようにすればよいですか?

+0

あなたは "各名前空間の内容を分ける" とはどういう意味ですか?宣言されたすべての名前空間をリストしたいだけですか? – mzjn

+1

@mzjn 適切な用語を使用していないと申し訳ありません。 上記のコードから、私はこの種のリストを持っています - '[xmlns:office =" urn:oasis:names:tc:opendocument:xmlns:office:1.0 "、xmlns:text =" urn:oasis :名前:tc:opendocument:xmlns:text:1.0 "、...]' –

答えて

2

ルート要素のnsmapプロパティは、宣言されたすべての名前空間を持つ辞書を保持します。例:

from lxml import etree 

XML = "your XML document here..." 

root = etree.fromstring(XML) 
for ns in sorted(root.nsmap.items()): 
    print ns 

出力:

('calcext', 'urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0') 
('chart', 'urn:oasis:names:tc:opendocument:xmlns:chart:1.0') 
('config', 'urn:oasis:names:tc:opendocument:xmlns:config:1.0') 
('css3t', 'http://www.w3.org/TR/css3-text/') 
('dc', 'http://purl.org/dc/elements/1.1/') 
('dom', 'http://www.w3.org/2001/xml-events') 
('dr3d', 'urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0') 
('draw', 'urn:oasis:names:tc:opendocument:xmlns:drawing:1.0') 
('drawooo', 'http://openoffice.org/2010/draw') 
('field', 'urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0') 
('fo', 'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0') 
('form', 'urn:oasis:names:tc:opendocument:xmlns:form:1.0') 
('formx', 'urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0') 
('grddl', 'http://www.w3.org/2003/g/data-view#') 
('loext', 'urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0') 
('math', 'http://www.w3.org/1998/Math/MathML') 
('meta', 'urn:oasis:names:tc:opendocument:xmlns:meta:1.0') 
('number', 'urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0') 
('of', 'urn:oasis:names:tc:opendocument:xmlns:of:1.2') 
('office', 'urn:oasis:names:tc:opendocument:xmlns:office:1.0') 
('officeooo', 'http://openoffice.org/2009/office') 
('ooo', 'http://openoffice.org/2004/office') 
('oooc', 'http://openoffice.org/2004/calc') 
('ooow', 'http://openoffice.org/2004/writer') 
('rpt', 'http://openoffice.org/2005/report') 
('script', 'urn:oasis:names:tc:opendocument:xmlns:script:1.0') 
('style', 'urn:oasis:names:tc:opendocument:xmlns:style:1.0') 
('svg', 'urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0') 
('table', 'urn:oasis:names:tc:opendocument:xmlns:table:1.0') 
('tableooo', 'http://openoffice.org/2009/table') 
('text', 'urn:oasis:names:tc:opendocument:xmlns:text:1.0') 
('xforms', 'http://www.w3.org/2002/xforms') 
('xhtml', 'http://www.w3.org/1999/xhtml') 
('xlink', 'http://www.w3.org/1999/xlink') 
('xsd', 'http://www.w3.org/2001/XMLSchema') 
('xsi', 'http://www.w3.org/2001/XMLSchema-instance') 
+0

ありがとうございました!これは問題ではありませんでしたが、私の将来の仕事を簡素化するのには大いに役立ちます:) –

+0

私には別の質問があります。私の質問でコードスニペットを見れば、これは最後に表示されるものです。 'office:version =" 1.2 "office:mimetype =" application/vnd.oasis.opendocument.text "' これをどのように抽出するのですか?彼らは名前空間ではないので、同じ方法でそれらを抽出することはできません。 –

+1

'office:version =" 1.2 "'と 'office:mimetype =" application/vnd.oasis.opendocument.text "は普通の属性です(名前空間の宣言ではありません)。それらはルート要素の 'attrib'プロパティに格納されます。 'items()'メソッドでも利用できます。 http://lxml.de/api/lxml.etree._Element-class.htmlを参照してください。 – mzjn