gpt4 book ai didi

xslt 根据拆分和父节点名称生成子节点

转载 作者:行者123 更新时间:2023-12-04 06:35:53 24 4
gpt4 key购买 nike

是否可以在 xsl 中执行以下操作?我试图拆分元素的内容并根据拆分创建子元素。为了让事情变得更棘手,偶尔会有异常(exception)(即节点 4 不会被拆分)。我想知道是否有一种方法可以做到这一点,而无需为每个元素进行硬编码的显式拆分。同样,不确定这是否可能。谢谢您的帮助!

原始 XML:

<document>
<node>
<node-1>hello world1</node-1>
<node-2>hello^world2</node-2>
<node-3>hello^world3</node-3>
<node-4>hello^world4</node-4>
</node>
</document>

转换后的 XML
<document>
<node>
<node-1>hello world1</node-1>
<node-2>
<node2-1>hello</node2-1>
<node2-2>world2</node2-2>
</node-2>
<node-3>
<node3-1>hello</node3-1>
<node3-2>world3</node3-2>
</node-3>
<node-4>hello^world4</node-4>
</node>
</document>

最佳答案

这是一个 XSL 1.0 解决方案。我认为您的示例输出中 node-4 的不一致只是一个错字。否则,您必须定义为什么 node3 被拆分而 node4 没有。

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

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

<xsl:template match="/">
<document>
<node>
<xsl:apply-templates select="document/node/*"/>
</node>
</document>
</xsl:template>

<xsl:template match="*">
<xsl:variable name="tag" select="name()"/>

<xsl:choose>

<xsl:when test="contains(text(),'^')">
<xsl:element name="{$tag}">
<xsl:element name="{concat($tag,'-1')}">
<xsl:value-of select="substring-before(text(),'^')"/>
</xsl:element>
<xsl:element name="{concat($tag,'-2')}">
<xsl:value-of select="substring-after(text(),'^')"/>
</xsl:element>
</xsl:element>
</xsl:when>

<xsl:otherwise>
<xsl:copy-of select="."/>
</xsl:otherwise>

</xsl:choose>

</xsl:template>

</xsl:stylesheet>

只要您要拆分的所有节点都在同一级别(在 /document/node 下),此方法就有效。 .如果实际文档结构不同,您将不得不调整解决方案以匹配。

关于xslt 根据拆分和父节点名称生成子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4889594/

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