想要为 XML 编写 XSLT 以获得树形结构吗?

发布于 2024-11-25 07:49:10 字数 805 浏览 1 评论 0原文

我有一些像这样的XML;我想编写 XSLT。我可以在其中提取属性 V。并生成这样的树结构。

PS
.
.
....Product Category
.           .
.           .
.           .
.            Product.
.
....Financial Product Images
           .
           .
           .Product2.

Other
.
.
........Customer Location Images
              .
              .
              . Service3.

  <PV V="PS:Product Category:Product1" L="" H="" C="327" /> 
  <PV V="PS:Financial Product Images:Product2" L="" H="" C="173" /> 
  <PV V="Other:Customer Location Images:Service2" L="" H="" C="122" /> 
  <PV V="PS:POS Product Images:Product3" L="" H="" C="109" /> 
  <PV V="N/A" L="" H="" C="106" /> 
  <PV V="Other:Customer Location Images:Service 3" L="" H="" C="98" /> 


有人可以帮助我吗,我对 XSLT 很陌生

I have got some XML like this; I want to be writing a XSLT. Where I can extract the attribute V. And produce a Tree Structure like this.

PS
.
.
....Product Category
.           .
.           .
.           .
.            Product.
.
....Financial Product Images
           .
           .
           .Product2.

Other
.
.
........Customer Location Images
              .
              .
              . Service3.

  <PV V="PS:Product Category:Product1" L="" H="" C="327" /> 
  <PV V="PS:Financial Product Images:Product2" L="" H="" C="173" /> 
  <PV V="Other:Customer Location Images:Service2" L="" H="" C="122" /> 
  <PV V="PS:POS Product Images:Product3" L="" H="" C="109" /> 
  <PV V="N/A" L="" H="" C="106" /> 
  <PV V="Other:Customer Location Images:Service 3" L="" H="" C="98" /> 


Can anybody please help me i am very new to XSLT

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不念旧人 2024-12-02 07:49:10

您可以使用此 XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/wrapper">
        <wrapper2>
            <xsl:apply-templates select="PV[starts-with(@V,'PS')]"/>
            <xsl:apply-templates select="PV[starts-with(@V,'Other')]"/>
        </wrapper2>
    </xsl:template>

    <xsl:template match="//PV">
        <xsl:variable name="elementName1" select="substring-before(./@V,':')"/>
        <xsl:variable name="elementName23" select="substring-after(./@V,':')"/>
        <xsl:variable name="elementName2"
            select="translate(substring-before($elementName23,':'), ' ', '_')"/>
        <xsl:variable name="elementName3"
            select="translate(substring-after($elementName23,':'), ' ', '_')"/>

        <xsl:if test="not($elementName1 = '')">
            <xsl:element name="{$elementName1}">
                <xsl:element name="{$elementName2}">
                    <xsl:element name="{$elementName3}"> </xsl:element>
                </xsl:element>
            </xsl:element>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

标记名称不能包含空格,因此您需要将其替换为其他字符。这是通过将空格替换为“_”来完成的。

You could use this XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/wrapper">
        <wrapper2>
            <xsl:apply-templates select="PV[starts-with(@V,'PS')]"/>
            <xsl:apply-templates select="PV[starts-with(@V,'Other')]"/>
        </wrapper2>
    </xsl:template>

    <xsl:template match="//PV">
        <xsl:variable name="elementName1" select="substring-before(./@V,':')"/>
        <xsl:variable name="elementName23" select="substring-after(./@V,':')"/>
        <xsl:variable name="elementName2"
            select="translate(substring-before($elementName23,':'), ' ', '_')"/>
        <xsl:variable name="elementName3"
            select="translate(substring-after($elementName23,':'), ' ', '_')"/>

        <xsl:if test="not($elementName1 = '')">
            <xsl:element name="{$elementName1}">
                <xsl:element name="{$elementName2}">
                    <xsl:element name="{$elementName3}"> </xsl:element>
                </xsl:element>
            </xsl:element>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

A tag name cannot have whitespaces so you need to replace them by some other character. This is done here by replacing spaces by '_'.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文