我有一个包含多个XML文档的XML文件。在大型XML文档中,每个文档都有一个根节点,并且该文件中的所有XML文档都是通用的。但是根名称中的子元素会有所不同。我必须编写一个for循环来动态迭代每个子节点,并且必须以表格格式显示它。我在下面粘贴了我的XML格式。我有这样的多个xml文件,但根节点对于每个文件都是通用的。我想将每个子元素映射为表行,将数据映射为表列。子元素数量会有所不同
<source>
<empname>john </empname>
<empid>25825 </empid>
<salary> 20000 </salary>
<dob> 12-08-1993</dob>
</source>
<source>
<empname>joe</empname>
<empid>25826</empid>
<salary>20000</salary>
<dob>12-07-1993</dob>
<source>
<source>
<emptype>developer</emptype>
<address>3155 </address>
<mobile>58258365</mobile>
</source>
<source>
<emptype>analyst</emptype>
<address>3155 </address>
<mobile>58258365</mobile>
</source>
<table>
<th> empname empid salary dob </th>
<td> john 25825 60000 date</td>
<td> joe 25826 70000 date</td>
</table>
每次更改<th>
和<td>
时,常见的事情就是根元素源代码。任何人都可以帮助我在循环中迭代这些元素并通过表格格式表示这些数据吗?
答案 0 :(得分:1)
我不完全理解你的陈述。您是否希望能够组合所有此类XML文件?怎么样?
<table>
<tr><th>empname</th><th>empid</th><th>salary</th><th>dob</th> <th>emptype</th></tr>
{for $child in doc("your-file")/source)
return <tr>{
return <td>{$child/empname}</td><td>{$child/empid}</td><td>{$child/salary}</td><td>{$child/dob}</td><td>{$child/emptype}</td>
}</tr></table>
答案 1 :(得分:1)
你可以试试这个,但是不同值的方法不能很好地扩展。您最好先确定列,然后像Tavolo的解决方案那样进行硬编码:
let $xml :=
<sources>
<source>
<empname>john </empname>
<empid>25825 </empid>
<salary> 20000 </salary>
<dob> 12-08-1993</dob>
</source>
<source>
<empname>joe</empname>
<empid>25826</empid>
<salary>20000</salary>
<dob>12-07-1993</dob>
</source>
<source>
<emptype>developer</emptype>
<address>3155 </address>
<mobile>58258365</mobile>
</source>
<source>
<emptype>analyst</emptype>
<address>3155 </address>
<mobile>58258365</mobile>
</source>
</sources>
let $sources := $xml/source
let $labels := fn:distinct-values($sources/*/fn:node-name(.))
return
<table>
<tr>{
for $label in $labels
return <th>{ $label }</th>
}</tr>
{
for $source in $sources
return <tr>{
for $label in $labels
return <th>{ fn:data($source/*[fn:node-name() = $label]) }</th>
}</tr>
}
</table>
HTH!