gpt4 book ai didi

xml - XSLT 转换为 xml,按键分组

转载 作者:行者123 更新时间:2023-12-04 17:07:08 25 4
gpt4 key购买 nike

我在编写 xsl 以将我的 xml 转换为 raport 版本时遇到问题。看起来像这样:

<library>
<authors>
<author id="1001">John</author>
<author id="1002">Tom</author>
</authors>
<articles>
<article>
<authorId>1001</authorId>
<title>Article1</title>
</article>
<article>
<authorId>1002</authorId>
<title>Article2</title>
</article>
<article>
<authorId>1001</authorId>
<title>Article3</title>
</article>
</articles>
</library>

我想把它改造成:

<raport>
<authorArticles>
<author>John</author>
<articles>
<article>Article1</article>
<article>Article3</article>
</articles>
</authorArticles>
<authorArticles>
<author>Tom</author>
<articles>
<article>Article2</article>
</articles>
</authorArticles>
</raport>

我有想法使用 for each,on 用于作者的 id,neasted 用于文章,但我不知道该怎么做。任何人都知道如何进行这种转变?

最佳答案

这个 XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="node() | @*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="library">
<raport>
<xsl:apply-templates select="authors/author"/>
</raport>
</xsl:template>

<xsl:template match="author">
<authorArticles>
<xsl:call-template name="identity"/>
<articles>
<xsl:apply-templates select="../../articles/article[authorId = current()/@id]"/>
</articles>
</authorArticles>
</xsl:template>

<xsl:template match="article">
<xsl:call-template name="identity"/> <!-- In case of more characteristics -->
</xsl:template>

<xsl:template match="title">
<xsl:value-of select="."/>
</xsl:template>

<xsl:template match="author/@id | authorId"/>

</xsl:stylesheet>

使用这个 XML 输入:

<library>
<authors>
<author id="1001">John</author>
<author id="1002">Tom</author>
</authors>
<articles>
<article>
<authorId>1001</authorId>
<title>Article1</title>
</article>
<article>
<authorId>1002</authorId>
<title>Article2</title>
</article>
<article>
<authorId>1001</authorId>
<title>Article3</title>
</article>
</articles>
</library>

提供这个需要的结果:

<raport>
<authorArticles>
<author>John</author>
<articles>
<article>Article1</article>
<article>Article3</article>
</articles>
</authorArticles>
<authorArticles>
<author>Tom</author>
<articles>
<article>Article2</article>
</articles>
</authorArticles>
</raport>

进一步的优化可能是使用键,但对于您的结构来说它看起来还为时过早。

关于xml - XSLT 转换为 xml,按键分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4443948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com