gpt4 book ai didi

xml - 将具有相同属性名称的多个元素转换为具有这些属性值作为子元素的新元素

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

我快到了,但卡在最后一部分。我正在尝试改变这个:

<record>
<title language="en">title EN</title>
<title language="nl">title NL</title>

<technique language="en">tech EN</technique>
<technique language="nl">tech NL</technique>
</record>
<record>
<title>
<en>title EN</en>
<nl>title NL</nl>
</title>
<technique>
<en>tech EN</en>
<nl>tech NL</nl>
</technique>
</record>
我有一个样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!-- identity transform for otherwise-unmatched nodes and attributes -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>

<!-- transform for title elements at any depth -->
<xsl:template match="title">
<xsl:element name="{@language}">
<!-- transform this node's non-attribute children -->
<xsl:apply-templates select="node()" />
</xsl:element>
</xsl:template>

<xsl:template match="technique">
<xsl:element name="{@language}">
<!-- transform this node's non-attribute children -->
<xsl:apply-templates select="node()" />
</xsl:element>
</xsl:template>

</xsl:stylesheet>

但这会产生这个:
<record>
<en>title EN</en>
<nl>title NL</nl>

<en>tech EN</en>
<nl>tech NL</nl>
</record>
差不多了,但我不知道如何让新元素嵌套在 <title> 中和 <technique>元素
我希望有人可以帮助我,在此先感谢!
沃特

编辑:
这是完整的 XML(好吧,只有 2 个元素,但这应该可以更好地说明我想要实现的目标。只有两次(带有语言属性)的元素应该被转换......文档的其余部分应该保持完整
<?xml version="1.0" encoding="UTF-8"?>
<resultset>
<records>
<record>
<metadata>
<dcls />
<recordnumber>1</recordnumber>
<publisher>XXX</publisher>
</metadata>
<data>
<records>
<objectid>12</objectid>
<objectnumber>1212</objectnumber>
<artist>
Bob
<alphasort>Bob</alphasort>
<displaydate>1937</displaydate>
</artist>
<title language="NL">Title in NL</title>
<title language="EN">Title in EN</title>
<category language="NL">Schilderkunst</category>
<category Language="EN">Paintings</category>
<dated>1972</dated>
<datebegin>1972</datebegin>
<dateend>1972</dateend>
<technique language="NL">olieverf op doek</technique>
<technique language="EN">oil on canvas</technique>
<dimensions>150 x 150 cm</dimensions>
<webtext language="EN">Some EN text</webtext>
<webtext language="NL">Some NL text</webtext>
<standplaats>Amsterdam</standplaats>
</records>
</data>
</record>
<record>
<metadata>
<dcls />
<recordnumber>2</recordnumber>
<publisher>XXX</publisher>
</metadata>
<data>
<records>
<objectid>33</objectid>
<objectnumber>3333</objectnumber>
<artist>
Saskia
<alphasort>Saskia</alphasort>
<displaydate>1982</displaydate>
</artist>
<title language="EN">title in EN</title>
<title language="NL">title in NL</title>
<Series>1 / 2</Series>
<category language="NL">Fotografie</category>
<category Language="EN">Photography</category>
<dated>2016</dated>
<datebegin>2016</datebegin>
<dateend>2016</dateend>
<technique language="NL">C-print op aluminium</technique>
<technique language="EN">C-print on aluminum</technique>
<dimensions>A2 (2x)</dimensions>
<webtext language="NL">Some NL text</webtext>
<webtext language="EN">Some EN text</webtext>
<standplaats>Amsterdam</standplaats>
</records>
</data>
</record>
</records>
</resultset>

最佳答案

或者这也可以以完全通用的方式完成:

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

<xsl:output method="xml" indent="yes"/>

<xsl:template match="*">
<xsl:copy>
<xsl:for-each-group select="*" group-by="name()">
<xsl:element name="{current-grouping-key()}">
<xsl:for-each select="current-group()/@*">
<xsl:element name="{.}">
<xsl:value-of select="../."/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>
看到它在这里工作: https://xsltfiddle.liberty-development.net/93nwMoz

关于xml - 将具有相同属性名称的多个元素转换为具有这些属性值作为子元素的新元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65619444/

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