gpt4 book ai didi

xml - XSLT 中的身份转换

转载 作者:数据小太阳 更新时间:2023-10-29 01:59:54 24 4
gpt4 key购买 nike

我有这个源 XML:

<?xml version="1.0"?>
<root>
<item1>
<name>test</name>
<price>160</price>
<stock>4</stock>
<country>Belgium</country>
</item1>
<item2>
<name>Alfa</name>

<price>140</price>

<stock>3</stock>

<country>Turkey</country>
</item2>
<item3>
<name>Beta</name>

<price>110</price>

<stock>48</stock>

<country>Holland</country>
</item3>
<product id="p1">
<name>Delta</name>

<price>800</price>

<stock>4</stock>

<country>Denmark</country>
</product>
<product id="p2">
<name>Golf</name>

<price>1000</price>

<stock>5</stock>

<country>Germany</country>
</product>
<product id="p3">
<name>Alfa</name>

<price>1200</price>

<stock>19</stock>

<country>Germany</country>
</product>
<product id="p4">
<name>Foxtrot</name>

<price>1500</price>

<stock>5</stock>

<country>Australia</country>
</product>
<product id="p5">
<name>Tango</name>

<price>1225</price>

<stock>3</stock>

<country>Japan</country>
</product>
</root>

我希望它看起来像这样:

<?xml version="1.0"?>
<root>
<action>
<name>test</name>

<price>160</price>

<stock>4</stock>

<country>Belgium</country>
</action>
<action>
<name>Alfa</name>

<price>140</price>

<stock>3</stock>

<country>Turkey</country>
</action>
<action>
<name>Beta</name>

<price>110</price>

<stock>48</stock>

<country>Holland</country>
</action>
<action>
<name>Delta</name>

<price>800</price>

<stock>4</stock>

<country>Denmark</country>
</action>
<action>
<name>Golf</name>

<price>1000</price>

<stock>5</stock>

<country>Germany</country>
</action>
<action>
<name>Alfa</name>

<price>1200</price>

<stock>19</stock>

<country>Germany</country>
</action>
<action>
<name>Foxtrot</name>

<price>1500</price>

<stock>5</stock>

<country>Australia</country>
</action>
<action>
<name>Tango</name>

<price>1225</price>

<stock>3</stock>

<country>Japan</country>
</action>
</root>

所以 <item1><item3 > 变成

<action>

还有 <product>失去了它的属性,也变成了

<action>

有人可以告诉我如何使用 XSLT 做到这一点吗?因为我现在有 2 个不同的 XSL。我想将它们组合起来只创建一个 XSL。

提前致谢

最佳答案

这个转换:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

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

<xsl:template match="product|*[starts-with(name(), 'item')]">
<action>
<xsl:apply-templates select="node()|@*"/>
</action>
</xsl:template>

<xsl:template match="product/@id"/>
</xsl:stylesheet>

应用于提供的 XML 文档时:

<root>
<item1>
<name>test</name>
<price>160</price>
<stock>4</stock>
<country>Belgium</country>
</item1>
<item2>
<name>Alfa</name>
<price>140</price>
<stock>3</stock>
<country>Turkey</country>
</item2>
<item3>
<name>Beta</name>
<price>110</price>
<stock>48</stock>
<country>Holland</country>
</item3>
<product id="p1">
<name>Delta</name>
<price>800</price>
<stock>4</stock>
<country>Denmark</country>
</product>
<product id="p2">
<name>Golf</name>
<price>1000</price>
<stock>5</stock>
<country>Germany</country>
</product>
<product id="p3">
<name>Alfa</name>
<price>1200</price>
<stock>19</stock>
<country>Germany</country>
</product>
<product id="p4">
<name>Foxtrot</name>
<price>1500</price>
<stock>5</stock>
<country>Australia</country>
</product>
<product id="p5">
<name>Tango</name>
<price>1225</price>
<stock>3</stock>
<country>Japan</country>
</product>
</root>

产生想要的、正确的结果:

<root>
<action>
<name>test</name>
<price>160</price>
<stock>4</stock>
<country>Belgium</country>
</action>
<action>
<name>Alfa</name>
<price>140</price>
<stock>3</stock>
<country>Turkey</country>
</action>
<action>
<name>Beta</name>
<price>110</price>
<stock>48</stock>
<country>Holland</country>
</action>
<action>
<name>Delta</name>
<price>800</price>
<stock>4</stock>
<country>Denmark</country>
</action>
<action>
<name>Golf</name>
<price>1000</price>
<stock>5</stock>
<country>Germany</country>
</action>
<action>
<name>Alfa</name>
<price>1200</price>
<stock>19</stock>
<country>Germany</country>
</action>
<action>
<name>Foxtrot</name>
<price>1500</price>
<stock>5</stock>
<country>Australia</country>
</action>
<action>
<name>Tango</name>
<price>1225</price>
<stock>3</stock>
<country>Japan</country>
</action>
</root>

解释:

  1. 身份规则“按原样”复制每个节点。

  2. 我们有两个模板覆盖身份规则。第一个模板匹配任何 product 或名称以字符串 item 开头的任何元素。它通过创建和输出 action 元素有效地将匹配元素“重命名”为 action

  3. 第二个覆盖模板匹配任何 product 元素的任何 id 属性。此模板没有主体,这有效地“删除”了匹配的属性——它不会在输出中复制/重新创建。

关于xml - XSLT 中的身份转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8679557/

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