xml - XSLT - 分组 XML 数据
问题描述
我试图通过将 2<element>
个节点组合成一个来将 XML 转换为特定的 XML 格式<item>
。然后重复格式 foreach <element>
。如果没有日期来填充它们,我想要空白节点。示例将位于所需结果的最底部。注意最后三个节点是空的。
我的 XML
<feed version="2.4">
<list>
<element>
<field name="01">text1</field>
<field name="02">text2</field>
<field name="03">text3</field>
<field name="04">text4</field>
</element>
<element>
<field name="01">text5</field>
<field name="02">text6</field>
<field name="03">text7</field>
<field name="04">text8</field>
</element>
<element>
<field name="01">text9</field>
<field name="02">text10</field>
<field name="03">text11</field>
<field name="04">text12</field>
</element>
<element>
<field name="01">text13</field>
<field name="02">text14</field>
<field name="03">text15</field>
<field name="04">text16</field>
</element>
<element>
<field name="01">text17</field>
<field name="02">text18</field>
<field name="03">text19</field>
<field name="04">text20</field>
</element>
</list>
期望的结果
<item>
<title1>text1</title1>
<desc1>text2</desc1>
<opt1>text3</opt1>
<title2>text5</title2>
<desc2>text6</desc2>
<opt2>text7</opt2>
</item>
<item>
<title1>text9</title1>
<desc1>text10</desc1>
<opt1>text11</opt1>
<title2>text13</title2>
<desc2>text14</desc2>
<opt2>text15</opt2>
</item>
<item>
<title1>text17</title1>
<desc1>text18</desc1>
<opt1>text19</opt1>
<title2></title2>
<desc2></desc2>
<opt2></opt2>
</item>
我正在使用的 XSLT。我很想获得 title2、desc2、opt2 的下一个值。
<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:for-each select="feed/list/element">
<xsl:if test="not(number()=0) and position() mod 2 = 0">
<Item>
<title1><xsl:value-of select="field[@name='01']"/></title1>
<desc1><xsl:value-of select="field[@name='02']"/></desc1>
<opt1><xsl:value-of select="field[@name='03']"/></opt1>
<title2><xsl:value-of select="field[@name='01']"/></title2>
<desc2><xsl:value-of select="field[@name='02']"/></desc2>
<opt2><xsl:value-of select="field[@name='03']"/></opt2>
</Item>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
解决方案
怎么样:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/feed">
<output>
<xsl:for-each select="list/element[position() mod 2 = 1]">
<item>
<title1>
<xsl:value-of select="field[@name='01']"/>
</title1>
<desc1>
<xsl:value-of select="field[@name='02']"/>
</desc1>
<opt1>
<xsl:value-of select="field[@name='03']"/>
</opt1>
<xsl:variable name="next" select="following-sibling::element[1]" />
<title2>
<xsl:value-of select="$next/field[@name='01']"/>
</title2>
<desc2>
<xsl:value-of select="$next/field[@name='02']"/>
</desc2>
<opt2>
<xsl:value-of select="$next/field[@name='03']"/>
</opt2>
</item>
</xsl:for-each>
</output>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- javascript - 代码无法在反应应用程序中选择 css 文件
- node.js - HmacSHA1 不同导致节点加密和 CryptoJS
- powershell - 导出所有订阅 RBAC,重点关注 Azure AD 组并解析分配的用户
- r - 带有 gt 的部分粗体列标题
- android - 有没有办法修复 MockWebServer 的端口
- r - 用ggplot覆盖R中的全局数据参数
- javascript - 从 Typescript 接口使用空键值初始化对象
- flutter - 为什么我不能用 shared_preferences 保存 int?
- variables - 使用 Expect 脚本从文本文件中读取两列
- python - 无法使用 SSHTunnelForwarder 通过 Python 应用程序连接到部署在 Google Cloud 上的 VM 上的 MongodB