Tôi đang cố gắng chuẩn hóa biểu diễn một số dữ liệu XML bằng cách sắp xếp các thuộc tính của từng phần tử theo tên (không phải giá trị). Ý tưởng là để giữ sự khác biệt về văn bản tối thiểu khi các thuộc tính được thêm vào hoặc bị loại bỏ và để ngăn các trình soạn thảo khác nhau đưa ra các biến thể tương đương. Các tệp XML này nằm dưới sự kiểm soát nguồn và các nhà phát triển đang muốn thay đổi các thay đổi mà không cần sử dụng các công cụ XML chuyên dụng.Sử dụng XSL để sắp xếp các thuộc tính
Tôi đã rất ngạc nhiên khi không phải tìm ví dụ XSL về cách thực hiện điều này. Về cơ bản tôi chỉ muốn biến đổi danh tính với các thuộc tính được sắp xếp. Tôi nghĩ ra những điều sau đây có vẻ như hoạt động trong tất cả các trường hợp thử nghiệm của tôi:
<?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:template match="*|/|text()|comment()|processing-instruction()">
<xsl:copy>
<xsl:for-each select="@*">
<xsl:sort select="name(.)"/>
<xsl:copy/>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Như một tổng XSL n00b, tôi sẽ đánh giá cao bất kỳ nhận xét nào về phong cách hoặc hiệu quả. Tôi nghĩ rằng nó có thể hữu ích để đăng nó ở đây vì nó có vẻ là ít nhất không phải là một ví dụ phổ biến.
Biến áp XSL có đảm bảo rằng thứ tự bạn chỉ định cho các thuộc tính là thứ tự được viết ra không? –
Các công cụ XML không đảm bảo rằng bất kỳ đầu ra XML nào giữ nguyên thứ tự thuộc tính ngay cả khi bạn cố gắng xây dựng nó như trên. Cũng nên nhớ rằng bạn thậm chí không thể đảm bảo biểu tượng nào được sử dụng để trích dẫn các giá trị. So sánh so sánh về XML thường là một ý tưởng tồi. –