2016-05-11 10 views
2

Juliaを使用してthis XML fileをJSONに変換したいと思います。ジュリアを使用して(かなり)単純なXMLファイルをJSONに変換

これはタグ/要素があり属性はない非常に単純なXMLファイルです。

私はこれを行ういくつかのオンラインツールを見つけましたが、私は がこのようなサービスに依存せず、これに独自のジュリアコードを持たせたいと考えています。

LightXMLは、解析するために役立つかもしれない

using LightXML 
xdoc = parse_string(s_xml) 
xroot = root(xdoc) 
... 

JSON.jlは出力JSONファイル

f = open("my.json", "w") 
JSON.print(f, d) 
close(f) 

に使用されますが、私は、このような課題を達成するために、このXMLツリーをトラバースする方法がわかりません。

答えて

1

数日前にこの問題が発生しました。 Juliaでは既存の実装が見つかりませんでしたので、いくつかの機能を最初から組み合せています。

基本的な解決策は、再帰的アプローチを使用してXMLをトラバースすることでした。その間、タグと要素は、DataStructuresパッケージの一連のネストされたMultiDictオブジェクトに格納されます。また、LightXMLパッケージを使用して、開始時にXML文書を解析します。

次に、入れ子になったMultiDictに完全なXMLを読み込むと、MultiDict(再帰も使用)をJSONの適切な書式の文字列に解凍し始めます。この部分はやや難解でした。

私たちの実装はかなりシンプルです。たとえば、XMLの属性を完全に無視します。しかし、私はこのようなアプローチ(つまり、再帰とネストされたマルチ辞書)はおそらくばかげたものではないと思っています。



編集:

当社の機能がモジュールに包まれています。あなたはhereを見ることができます。

+0

コードは利用可能ですか(利用可能にすることはできますか)。 –

+0

@ DavidP.Sanders確かに、少し掃除してGithubに載せています。リンクを少し投稿します。 – paulstey

+0

@paulsteyこれはとてもいいですね。 –

0

簡単な再帰的なアプローチとLightXMLを使用してXMLドキュメントを処理できます。ここでは大まかなスケルトンです:もちろん

<FinancialFunction> 
    {Abbreviation} ACOS 
    {CamelCaseName} Acos 
    {ShortDescription} Vector Trigonometric ACos 
    {GroupId} Math Transform 
<RequiredInputArguments> 
<RequiredInputArgument> 
    {Type} Double Array 
    {Name} inReal 
<OutputArguments> 
<OutputArgument> 
    {Type} Double Array 
    {Name} outReal 
<Flags> 
    {Flag} Line 

が、楽しみは始まったばかり:あなたのファイルに対して、このような何かを与える

using LightXML 

function xout(xelement, mode) 
    if mode == 1 
     println("<",name(xelement), ">") 
    else 
     println("\t{", name(xelement), "}\t", content(xelement)) 
    end 
end 

function parse_node(c) 
    e = XMLElement(c) 
    if length(collect(child_elements(e))) > 0 
     xout(e, 1) 
     for child in child_elements(e) 
      parse_node(child) 
     end 
    else 
     xout(e, 0) 
    end 
end 

xdoc = parse_string(rawxml) 
xroot = root(doc) 

for c in child_elements(xroot) 
    parse_node(c) 
end 

!異なる要素などの異なる<Type>タグと<Name>タグを区別しなければなりません。幸いです!

+0

JSONファイルを見ない –

+0

@FemtoTraderはあなたに "このXMLツリーをどのようにしてこのようなタスクを達成するのかわかりません"と尋ねました。 – daycaster

関連する問題