2017-11-13 24 views
0

Sourceと同じペイロードにデータと列を持つJSONデータが入っています。saxonを使用したJSONからXMLへの動的変換

<?xml version="1.0" encoding="UTF-8"?> 
    <map xmlns="http://www.w3.org/2005/xpath-functions"> 
    <boolean key="allData">true</boolean> 
    <map key="factMap"> 
    <map key="T!T"> 
    <array key="rows"> 
     <map> 
      <array key="dataCells"> 
       <map> 
       <string key="label">1A</string> 
       <string key="value">1A</string> 
       </map> 
       <map> 
       <string key="label">1B</string> 
       <null key="value"/> 
       </map> 
       <map> 
       <string key="label">1C</string> 
       <string key="value">1C</string> 
       </map> 
      </array> 
     </map> 
     <map> 
      <array key="dataCells"> 
       <map> 
       <string key="label">2A</string> 
       <string key="value">2A</string> 
       </map> 
       <map> 
       <string key="label">2B</string> 
       <string key="value">2B</string> 
       </map> 
       <map> 
       <string key="label">2C</string> 
       <null key="value"/> 
       </map> 
      </array> 
     </map> 
     </map> 
<map key="detailColumnInfo"> 
    <map key="name.F1"> 
    <string key="dataType">string</string> 
    <string key="label">F1</string> 
    </map> 
    <map key="state.F2"> 
    <string key="dataType">string</string> 
    <string key="label">F2</string> 
    </map> 
    <map key="dist.F3"> 
    <string key="dataType">string</string> 
    <string key="label">F3</string> 
    </map> 
    </map> 
    </map> 

私たちは、XML出力次生成する必要があります:XSLTでJSONからXMLを使用すると、私は次のようなXMLを生成することができました。

<Root> 
    <Rows> 
    <Row> 
    <F1> 1A </F1> 
    </F2> 
    <F3> 1C </F3> 
    </Row> 
    <Row> 
    <F1>2A </F1> 
    <F2> 2B </F2> 
    </F3> 
    </Row> 
      </Rows> 

は、我々は
https://stackoverflow.com/questions/47173669/dynamic-xml-generation-using-xslt#= からの参照を取った後のデータを生成することができる。しかし、それはNULLタグを期待通りに動作しません。 誰でもこのような動的マッピングを実装するための解決策を提案することはできますか?リンクされた他の質問を参照することで

+0

「」のようなマークアップは意味がありません。開始タグはどこですか? –

答えて

1

は、私はあなたが抽出したい値は時々<string>要素として、だけでなく、時には<null>要素として表現されているという事実についてであるためにあなたの質問を取ります。どちらの方法でも、興味のある要素はkey属性(値0​​)で区別されるので、その選択基準を基にすることができます。

つまり、XPath式でfn:string[@key = 'value']を使用する代わりに、*[@key = 'value']またはnode()[@key = 'value']を使用してください。他の選択肢もありますが、あなたが参照した答えのXSLにこれらのバリエーションのいずれかを適用すると、あなたが望むような方法で提示した入力を処理する変換が得られます。私は意図的ではないと思っている)。

関連する問題