使用属性作为键合并相似的数据 xml 节点 ( xsl )

发布于 2024-10-08 12:37:58 字数 866 浏览 2 评论 0原文

我想将具有 N 个部分的文件转换为以下格式:

<File>
        <Sections Section="Section1" fieldName="field1" fieldValue="value1"/>
        <Sections Section="Section1" fieldName="field2" fieldValue="value2"/>
        <Sections Section="Section1" fieldName="field3" fieldValue="value3"/>
        <Sections Section="Section2" fieldName="field1" fieldValue="value1"/>
        <Sections Section="Section2" fieldName="field2" fieldValue="value2"/>
        <Sections Section="Section2" fieldName="field3" fieldValue="value3"/>
</File>

转换为

<File>
   <Section1 field1="value1" field2="value2" field3="value3"/>
   <Section2 field1="value1" field2="value2" field3="value3"/>
</File>

使用属性部分的值作为创建元素的键。

我尝试了一些东西,但我做不到。

你能帮我吗?

谢谢。

I want to convert a file with N sections with this format:

<File>
        <Sections Section="Section1" fieldName="field1" fieldValue="value1"/>
        <Sections Section="Section1" fieldName="field2" fieldValue="value2"/>
        <Sections Section="Section1" fieldName="field3" fieldValue="value3"/>
        <Sections Section="Section2" fieldName="field1" fieldValue="value1"/>
        <Sections Section="Section2" fieldName="field2" fieldValue="value2"/>
        <Sections Section="Section2" fieldName="field3" fieldValue="value3"/>
</File>

Into

<File>
   <Section1 field1="value1" field2="value2" field3="value3"/>
   <Section2 field1="value1" field2="value2" field3="value3"/>
</File>

Using attribute Section's value as key to create elements.

I tried somethings, but i couldn't.

Could you help me?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

天气好吗我好吗 2024-10-15 12:37:58

这是 XSLT 1.0 样式表:

<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

  <xsl:output indent="yes"/>

  <xsl:key name="k1" match="File/Sections" use="@Section"/>

  <xsl:template match="File">
    <xsl:copy>
      <xsl:apply-templates select="Sections[generate-id() = generate-id(key('k1', @Section)[1])]" mode="group"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Sections" mode="group">
    <xsl:element name="{@Section}">
      <xsl:apply-templates select="key('k1', @Section)"/>
    </xsl:element>
  </xsl:template>

  <xsl:template match="Sections">
    <xsl:attribute name="{@fieldName}">
      <xsl:value-of select="@fieldValue"/>
    </xsl:attribute>
  </xsl:template>

</xsl:stylesheet>

Here is an XSLT 1.0 stylesheet:

<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

  <xsl:output indent="yes"/>

  <xsl:key name="k1" match="File/Sections" use="@Section"/>

  <xsl:template match="File">
    <xsl:copy>
      <xsl:apply-templates select="Sections[generate-id() = generate-id(key('k1', @Section)[1])]" mode="group"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Sections" mode="group">
    <xsl:element name="{@Section}">
      <xsl:apply-templates select="key('k1', @Section)"/>
    </xsl:element>
  </xsl:template>

  <xsl:template match="Sections">
    <xsl:attribute name="{@fieldName}">
      <xsl:value-of select="@fieldValue"/>
    </xsl:attribute>
  </xsl:template>

</xsl:stylesheet>
她如夕阳 2024-10-15 12:37:58

这是 XSLT 2.0 样式表

<xsl:stylesheet version="2.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/File" >
        <xsl:copy>
        <xsl:for-each-group select="Sections" group-by="@Section">
            <xsl:element name="{current-grouping-key()}">
                <xsl:for-each select="current-group()">
                    <xsl:attribute name="{@fieldName}" select="@fieldValue"/>
                </xsl:for-each>
            </xsl:element>
        </xsl:for-each-group>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

And here's the XSLT 2.0 stylesheet

<xsl:stylesheet version="2.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/File" >
        <xsl:copy>
        <xsl:for-each-group select="Sections" group-by="@Section">
            <xsl:element name="{current-grouping-key()}">
                <xsl:for-each select="current-group()">
                    <xsl:attribute name="{@fieldName}" select="@fieldValue"/>
                </xsl:for-each>
            </xsl:element>
        </xsl:for-each-group>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文