0

我们有来自 Source 的传入 JSON 数据,其中的数据和列位于相同的有效负载中。在 XSLT 中使用 json-to-xml 我能够生成如下 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 输出。

<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# =参考后,我们能够生成数据= 但它对于空标签没有按预期工作。任何人都可以提出可能的解决方案来实现这种动态映射。

4

1 回答 1

1

通过参考您链接的另一个问题,我认为您的问题是关于您要提取的值有时表示为<string>元素,但有时也表示为元素的事实<null>。似乎无论哪种方式,感兴趣的元素都由key具有 value 的属性来区分'value',因此您可以以此为基础选择标准。

也就是说,不要fn:string[@key = 'value']在 XPath 表达式中使用,而是使用*[@key = 'value']或什至node()[@key = 'value']. 还有其他选择,但是在您引用的答案中将这些变体中的任何一个应用于 XSL 将产生一个转换,该转换以您似乎想要的方式处理您呈现的输入(尽管此问题中呈现的输出格式不正确,其中我认为是无意的)。

于 2017-11-13T19:14:23.733 回答