【问题标题】:Convert xslt/xml separate images转换 xslt/xml 单独的图像
【发布时间】:2021-12-13 13:40:26
【问题描述】:

谁能帮助我们将使用 XSLT 1.0 的 XML 代码转换为 XML 结果。

XML

<data>
<post>
<SKU>I-DQ5285 53053</SKU>
<ImageURL>https://testweb.com/wp-content/uploads/2021/08/DQ5285-53053.jpg|https://testweb.com/wp-content/uploads/2021/08/DQ5285-53053_2.jpg|https://testweb.com/wp-content/uploads/2021/08/DQ5285-53053_3.jpg|https://testweb.com/wp-content/uploads/2021/08/DQ5285-53053_4.jpg</ImageURL>
</post>
</data>

结果除外:

<data>
<post>
<SKU>I-DQ5285 53053</SKU>
<ImageURL1>https://testweb.com/wp-content/uploads/2021/08/DQ5285-53053.jpg</ImageURL1>
<ImageURL2>https://testweb.com/wp-content/uploads/2021/08/DQ5285-53053.jpg</ImageURL2>
<ImageURL3>https://testweb.com/wp-content/uploads/2021/08/DQ5285-53053.jpg</ImageURL3>
<ImageURL4>https://testweb.com/wp-content/uploads/2021/08/DQ5285-53053.jpg</ImageURL4>
<ImageURL5>https://testweb.com/wp-content/uploads/2021/08/DQ5285-53053.jpg</ImageURL5>
</post>
</data>

【问题讨论】:

    标签: xml xslt


    【解决方案1】:

    请尝试以下 XSLT。

    在 XML 元素名称中放入流水号不是一个好习惯:&lt;ImageURL1&gt;...&lt;ImageURLN&gt;

    XSLT 2.0 具有用于此类任务的内置函数 tokenize()

    输入 XML

    <?xml version="1.0"?>
    <data>
        <post>
            <SKU>I-DQ5285 53053</SKU>
            <ImageURL>https://testweb.com/wp-content/uploads/2021/08/DQ5285-53053.jpg|https://testweb.com/wp-content/uploads/2021/08/DQ5285-53053_2.jpg|https://testweb.com/wp-content/uploads/2021/08/DQ5285-53053_3.jpg|https://testweb.com/wp-content/uploads/2021/08/DQ5285-53053_4.jpg</ImageURL>
        </post>
    </data>
    

    XSLT

    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="xml" encoding="utf-8" indent="yes"/>
        <xsl:strip-space elements="*"/>
    
        <xsl:template match="@*|node()">
            <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
            </xsl:copy>
        </xsl:template>
    
        <xsl:template match="ImageURL">
            <xsl:call-template name="tokenize">
                <xsl:with-param name="text" select="normalize-space(.)"/>
                <xsl:with-param name="elemName" select="'ImageURL'"/>
            </xsl:call-template>
        </xsl:template>
    
        <xsl:template name="tokenize">
            <xsl:param name="text"/>
            <xsl:param name="elemName"/>
            <xsl:param name="delimiter" select="'|'"/>
            <xsl:variable name="token" select="substring-before(concat($text, $delimiter), $delimiter)"/>
            <xsl:if test="$token">
                <xsl:element name="{$elemName}">
                    <xsl:value-of select="$token"/>
                </xsl:element>
            </xsl:if>
            <xsl:if test="contains($text, $delimiter)">
                <!-- recursive call -->
                <xsl:call-template name="tokenize">
                    <xsl:with-param name="text" select="substring-after($text, $delimiter)"/>
                    <xsl:with-param name="elemName" select="$elemName"/>
                </xsl:call-template>
            </xsl:if>
        </xsl:template>
    </xsl:stylesheet>
    

    输出 XML

    <?xml version="1.0" encoding="utf-8"?>
    <data>
      <post>
        <SKU>I-DQ5285 53053</SKU>
        <ImageURL>https://testweb.com/wp-content/uploads/2021/08/DQ5285-53053.jpg</ImageURL>
        <ImageURL>https://testweb.com/wp-content/uploads/2021/08/DQ5285-53053_2.jpg</ImageURL>
        <ImageURL>https://testweb.com/wp-content/uploads/2021/08/DQ5285-53053_3.jpg</ImageURL>
        <ImageURL>https://testweb.com/wp-content/uploads/2021/08/DQ5285-53053_4.jpg</ImageURL>
      </post>
    </data>
    

    【讨论】:

    • 感谢您的回复。不幸的是,我们必须将照片重新导入到另一个站点,并且我们必须将每张照片放在单独的标签中,例如 1、2、3、4。您能帮我们更改照片的标签名称吗?
    猜你喜欢
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多