xml - 在 xslt 中映射 xml 元素的最佳方法
问题描述
我有以下xml格式。
<Floorplan IDValue="123" IDType="FloorplanID" IDRank="primary">
<FloorplanInfo>info<FloorplanInfo>
</Floorplan>
<Floorplan IDValue="456" IDType="FloorplanID" IDRank="primary">
<FloorplanInfo>info<FloorplanInfo>
</Floorplan>
<unit id = abc1 floorplanid = 123>
<unitinfo>info</unitinfo>
<unit>
<unit id = abc2 floorplanid = 123>
<unitinfo>info</unitinfo>
<unit>
<unit id = abc3 floorplanid = 456>
<unitinfo>info</unitinfo>
<unit>
<unit id = abc4 floorplanid = 456>
<unitinfo>info</unitinfo>
<unit>
基于平面图 id 的单位值,我想将它们映射到平面图并生成以下格式的 xml。这是否可以使用 xslt 以及什么可能是最好的方法。我不确定我是否以更好的方式解释了我的问题,但示例应该这样做。
<Floorplan IDValue="123" IDType="FloorplanID" IDRank="primary">
<FloorplanInfo>info<FloorplanInfo>
<unit id = abc1 floorplanid = 123>
<unitinfo>info</unitinfo>
<unit>
<unit id = abc2 floorplanid = 123>
<unitinfo>info</unitinfo>
<unit>
</Floorplan>
<Floorplan IDValue="456" IDType="FloorplanID" IDRank="primary">
<FloorplanInfo>info<FloorplanInfo>
<unit id = abc3 floorplanid = 456>
<unitinfo>info</unitinfo>
<unit>
<unit id = abc4 floorplanid = 456>
<unitinfo>info</unitinfo>
<unit>
</Floorplan>
提前致谢 !!
解决方案
这应该适合你。仅供参考:我必须清理您发布的 XML,因为它的格式不正确。
<xsl:key name="myKey" match="unit" use="@floorplanid"/>
<xsl:template match="Floorplan">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
<xsl:apply-templates select="key('myKey', @IDValue)" mode="unitMode"/>
</xsl:copy>
</xsl:template>
<!-- Suppress unit current nodes. -->
<xsl:template match="unit"/>
<!-- Use mode to add the new unit nodes. -->
<xsl:template match="unit" mode="unitMode">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- Identity template. -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
推荐阅读
- go - Sentry CaptureMessage 不刷新
- python - Python Pyinstaller MSYS 问题与 PyQtWebKit
- reactjs - 如何在使用 React Chrome 扩展程序打开页面之前显示弹出窗口?
- c++ - 为什么qt不进入foreach循环?
- kubeflow - 如何在 kubeflow 中跨多个组件使用 OutputPath
- android - 按下输入框中的箭头时显示自定义视图。(在本机反应中)
- regex - 尝试匹配分隔符之间的字符
- visual-studio - 在 Windows 安全模式下运行 Visual Studio
- python - 捕获 TypeError:缺少 1 个必需的位置参数:'self'
- apache-kafka - Kafka max.in.flight.request.per.connection