データベーステーブルに埋め込む前に、いくつかのXMLをpandasデータフレームに入れたいと思います。私はElement Treeとlxmlを見てきましたが、例は本当にシンプルで、私はそれらをこの複雑なものに推論することはできません。私はXMLを理解しています。私が必要とするものまで掘り下げる方法がわかりません。サンプルは以下の通りです。PythonのADO.NetデータサービスXMLからのメタデータプロパティの解析
私は<m:properties>
のものの後です。したがって、NEW_DATE = 1997-01-02T00:00:00、BC_1YEAR = 5.630000114440918などがデータベースに格納されます。 BC_1MONTH = NULLであり、他のノードと似ていないことに注目してください。
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed xml:base="http://data.treasury.gov/Feed.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
<title type="text">DailyTreasuryYieldCurveRateData</title>
<id>http://data.treasury.gov/feed.svc/DailyTreasuryYieldCurveRateData</id>
<updated>2017-10-30T20:31:53Z</updated>
<link rel="self" title="DailyTreasuryYieldCurveRateData" href="DailyTreasuryYieldCurveRateData" />
<entry>
<id>http://data.treasury.gov/Feed.svc/DailyTreasuryYieldCurveRateData(1)</id>
<title type="text"></title>
<updated>2017-10-30T20:31:53Z</updated>
<author>
<name />
</author>
<link rel="edit" title="DailyTreasuryYieldCurveRateDatum" href="DailyTreasuryYieldCurveRateData(1)" />
<category term="TreasuryDataWarehouseModel.DailyTreasuryYieldCurveRateDatum" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<content type="application/xml">
<m:properties>
<d:Id m:type="Edm.Int32">1</d:Id>
<d:NEW_DATE m:type="Edm.DateTime">1997-01-02T00:00:00</d:NEW_DATE>
<d:BC_1MONTH m:type="Edm.Double" m:null="true" />
<d:BC_3MONTH m:type="Edm.Double">5.190000057220459</d:BC_3MONTH>
<d:BC_6MONTH m:type="Edm.Double">5.3499999046325684</d:BC_6MONTH>
<d:BC_1YEAR m:type="Edm.Double">5.630000114440918</d:BC_1YEAR>
<d:BC_2YEAR m:type="Edm.Double">5.96999979019165</d:BC_2YEAR>
<d:BC_3YEAR m:type="Edm.Double">6.130000114440918</d:BC_3YEAR>
<d:BC_5YEAR m:type="Edm.Double">6.3000001907348633</d:BC_5YEAR>
<d:BC_7YEAR m:type="Edm.Double">6.4499998092651367</d:BC_7YEAR>
<d:BC_10YEAR m:type="Edm.Double">6.5399999618530273</d:BC_10YEAR>
<d:BC_20YEAR m:type="Edm.Double">6.8499999046325684</d:BC_20YEAR>
<d:BC_30YEAR m:type="Edm.Double">6.75</d:BC_30YEAR>
<d:BC_30YEARDISPLAY m:type="Edm.Double">0</d:BC_30YEARDISPLAY>
</m:properties>
</content>
</entry>
</feed>
これについて語っている良い記事へのリンクがある場合は、それも理解できます。正しくデータのために、返す...
Traceback (most recent call last):
File "C:/Users/Bob/Desktop/temp/yield curve script.py", line 25, in <module>
xml2dict(xml_data)
File "C:/Users/Bob/Desktop/temp/yield curve script.py", line 13, in xml2dict
root = lxml.etree.parse(xml_file)
File "src\lxml\lxml.etree.pyx", line 3427, in lxml.etree.parse (src\lxml\lxml.etree.c:81100)
File "src\lxml\parser.pxi", line 1811, in lxml.etree._parseDocument (src\lxml\lxml.etree.c:117831)
File "src\lxml\parser.pxi", line 1837, in lxml.etree._parseDocumentFromURL (src\lxml\lxml.etree.c:118178)
File "src\lxml\parser.pxi", line 1741, in lxml.etree._parseDocFromFile (src\lxml\lxml.etree.c:117090)
File "src\lxml\parser.pxi", line 1138, in lxml.etree._BaseParser._parseDocFromFile (src\lxml\lxml.etree.c:111636)
File "src\lxml\parser.pxi", line 595, in lxml.etree._ParserContext._handleParseResultDoc (src\lxml\lxml.etree.c:105092)
File "src\lxml\parser.pxi", line 706, in lxml.etree._handleParseResult (src\lxml\lxml.etree.c:106800)
File "src\lxml\parser.pxi", line 633, in lxml.etree._raiseParseError (src\lxml\lxml.etree.c:105611)
OSError: Error reading file '<?xml version="1.0" encoding="utf-8" standalone="yes"?>
上流のElementTreeをどれくらい使いたいですか?代わりに、[lxml.etree](http://lxml.de/tutorial.html)を使用すると、これのほうがはるかに簡単になります。 –
'// {http://schemas.microsoft.com/ado/2007/08/dataservices/metadata}プロパティ}を取得し、子プロセスを反復処理します。 –
私は '{'m': 'http://schemas.microsoft.com/ado/2007/08/dataservices/met adata'}'をnsmapとして渡そうとしていましたが、これも機能します。 :) –