【发布时间】:2019-02-18 15:26:50
【问题描述】:
背景
我有几个 XML 报告映射到一个两列 Excel ListObject(通过单个 XSD)。 XML 报告文件具有以下布局:
<report>
<general>
<name/>
</general>
<data>
<item/>
...
<item/>
</data>
</report>
每个 ListObject 列的 XPath 是:
/ns1:report/ns1:general/ns1:name/ns1:report/ns1:data/ns1:item
期望的输出
在第二列中包含所有单独的“/report/data/item”记录的 ListObject在第一个 ListObject 列中为 每个重复单个“/report/general/name”值这些项目中的 em> 个(因此我可以查询 ListObject 以汇总某些报告中的信息,而不是其他报告)。
电流输出
在将每个 XML 文件导入 XMLMap 时(使用append 选项),只有第一个item 元素出现在第二列中,对应的name 出现在第一列中。最终的 ListObject 包含每个导入的 XML 报告文件的一条记录的信息。
关于是否应该假设重用 XML 元素的正确性,有没有办法获得所需的输出?请注意,我考虑过使用 XSLT 来强制 item 元素包含报告 name,但这似乎对内存/磁盘空间的使用不佳。
【问题讨论】:
-
如果您被限制在 XPath-1.0 中,您可能只能获得第一项
item尽管 XPath 表达式确实匹配两个/几个。除了使用 XSLT 循环或 XPath-2.0 外,我不知道如何规避这个问题……也许其他人可以提供纯 XPath-1.0 解决方案…… -
@zx485 谢谢。令人沮丧的是,我相信 MS 尚未采用 XML/XSLT/XPATH 2.0+ AFAIK。此外,用于映射 ListObject 列的 XPath 似乎更加有限(例如,我找不到在 VBA 中使用
descendant-or-self或//语法的方法——但尚未彻底调查)