Điều bắt đầu như một điều đơn giản đã trở nên khá rắc rối đối với XSLT noob.Phân loại XSLT - cách sắp xếp các nút con xml bên trong nút cha với thuộc tính
Cố gắng sắp xếp childNodes/giảm dần nhưng, sau khi thêm một thuộc tính để nút cha của họ, tôi nhận được một lỗi khi gỡ lỗi trong VS2010:
"Attribute and namespace nodes cannot be added to the parent element after a text, comment, pi, or sub-element node has already been added."
Giả sử tôi có XML đơn giản này:
<posts>
<year value="2013">
<post postid="10030" postmonth="1">
<othernode></othernode>
<othernode2></othernode2>
</post>
<post postid="10040" postmonth="2">
<othernode></othernode>
<othernode2></othernode2>
</post>
<post postid="10050" postmonth="3">
<othernode></othernode>
<othernode2></othernode2>
</post>
</year>
<year value="2012">
<post postid="10010" postmonth="1">
<othernode></othernode>
<othernode2></othernode2>
</post>
<post postid="10015" postmonth="2">
<othernode></othernode>
<othernode2></othernode2>
</post>
<post postid="10020" postmonth="3">
<othernode></othernode>
<othernode2></othernode2>
</post>
</year>
</posts>
Tôi chuyển XPath vào xmldatasource để truy xuất nút <year>
có liên quan, ví dụ: 2013. Sau đó, tôi cần phải sắp xếp con của mình <post>
các nút giảm dần bằng cách sử dụng postid, vì vậy đối với <year value=2013>
, postid = 10050 sẽ hiển thị đầu tiên khi được hiển thị.
Vì vậy, phải rõ ràng: Tôi chỉ quan tâm đến việc sắp xếp bên trong một nút <year>
.
Trước khi tôi chia các nút vào nút riêng biệt (tức là xml/bài viết/bài) XSLT sau làm việc:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<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:sort select="@postid" data-type="text" order="descending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Bây giờ XMLDataSource trống khi chạy do lỗi trên. Nếu tôi vượt qua tăng dần vào thứ tự cùng một xml được trả về rõ ràng (không chuyển đổi)
Câu hỏi: cách cập nhật XSLT ở trên (hoặc mới) để chứa thuộc tính nút cha (<year value="">
)? Thông qua nghiên cứu, một câu trả lời cho biết "Tôi cần phải thêm tạo thuộc tính trước khi tạo thành phần". Điều này có ý nghĩa khi xem trình gỡ lỗi, các nút con được tạo thành theo thứ tự desc, nhưng thẻ năm bị thiếu thuộc tính của nó. Nhưng tôi không có một đầu mối thực sự về XSLT. Không thể thấy nó quá phức tạp nhưng chỉ không biết ngôn ngữ.
Bất kỳ trợ giúp nào, được đánh giá cao. Cảm ơn
Vậy đó. Tuyệt vời nó hoạt động. Cảm ơn ông rất nhiều! Có, tôi chỉ chuyển nút một năm cho XSLT. Tôi chọn năm/bài đăng tôi muốn hiển thị. Sẽ cố gắng tìm ra cấu trúc mới của bạn và tìm hiểu cách đọc xslt. – JimXC
Tại sao một người dùng 'data-type =" text "' trong trường hợp này? điều này rõ ràng tạo ra kết quả sai nếu giá trị 'postid' có thể có độ dài khác nhau. –
Đó là một điểm tốt. Tôi đã sử dụng nó vì đó là XSLT ban đầu của JimXC được sử dụng và nó không phải là trọng tâm của câu hỏi của anh ấy, cộng với tôi đã không nhận thấy rằng các ID trong ví dụ của anh ấy là số. Nếu các ID được đảm bảo là số, thì 'data-type =" numeric "' sẽ thích hợp hơn. – JLRishe