1 Câu hỏi: Cách sắp xếp thẻ xml bằng xslt

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi mới là thành viên trong stack stack, ngay cả khi tôi thường sử dụng nó trong một thời gian dài.

Tôi đang cố gắng sắp xếp một số thẻ vào tệp xml bằng tệp xslt.

Tệp của tôi là:

<?xml version="1.0" encoding="UTF-8"?>
<nots>
    <base_name>
        <label>B_bn</label>
        <functionality>
            <label>B_f2</label>
            <mails>z_user@domain.com</mails>
            <mails>f_user@domain.com</mails>
            <mails>a_user@domain.com</mails>
        </functionality>
        <functionality>
            <label>A_f1</label>
            <mails></mails>
        </functionality>
        <functionality>
            <label>C_f3</label>
            <mails>x_user@domain.com</mails>
            <mails>a_user@domain.com</mails>
        </functionality>
    </base_name>
    <base_name>
        <label>A_bn</label>
        <functionality>
            <label>C_f3</label>
            <mails></mails>
        </functionality>
        <functionality>
            <label>A_f1</label>
            <mails></mails>
        </functionality>
        <functionality>
            <label>B_f2</label>
            <mails></mails>
        </functionality>
    </base_name>
</nots>

Tôi muốn có được ở đầu ra một tệp XML mới trong đó các thẻ "base_name", "function" và "mails" được sắp xếp.

Sử dụng xslt sau:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns="urn:TestNamespace">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="no" />
    <xsl:strip-space elements="*"/>

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

    <xsl:template match="base_name">
        <xsl:copy>
            <xsl:apply-templates select="label" />
            <xsl:apply-templates select="functionality">
                    <xsl:sort select="label" />
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="nots">
        <xsl:copy>
            <xsl:apply-templates select="base_name">
                <xsl:sort select="label" />
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

Tôi có thể sắp xếp các thẻ "base_name" và "funzionality", nhưng vì tôi mới sử dụng xslt, tôi không biết cách sắp xếp các thẻ thư.

Xin vui lòng, ai đó có thể cho tôi biết cách giải quyết không? Cảm ơn trước sự ủng hộ của bạn! ;)

    
0
1 Câu trả lời                              1                         

Bạn chỉ cần thêm mẫu sau, để sắp xếp mails, bằng nút văn bản con của chúng.

<xsl:template match="functionality">
    <xsl:copy>
        <xsl:apply-templates select="label" />
        <xsl:apply-templates select="mails">
                <xsl:sort select="text()" />
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>    

Hoặc bạn có thể làm điều này ....

<xsl:template match="functionality">
    <xsl:copy>
        <xsl:apply-templates select="label" />
        <xsl:apply-templates select="mails">
                <xsl:sort select="." />
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>    

Ở đây . đại diện cho nút hiện tại (nghĩa là nút mails được chọn để sắp xếp). Vì nút mails của bạn chỉ có một nút văn bản duy nhất, giá trị của nút hiện tại sẽ chỉ là như vậy.

    
0
2019-05-08 08: 22: 37Z
nguồn đặt đây