Trong XPath 2.0 này có thể được sản xuất bởi một biểu thức XPath duy nhất:
/*/*/substring-after(., 'HarryPotter:')
Ở đây chúng ta đang sử dụng các tính năng rất mạnh mẽ của XPath 2.0 mà ở phần cuối của một đường dẫn của các bước vị trí chúng ta có thể đặt một hàm và hàm này sẽ được áp dụng trên tất cả các nút trong tập kết quả hiện tại.
Trong XPath 1.0, không có tính năng như vậy và điều này không thể được thực hiện trong một biểu thức XPath.
Chúng ta có thể thực hiện một chuyển đổi XSLT như sau:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:for-each select="/*/*[substring-after(., 'HarryPotter:')]">
<xsl:value-of select=
"substring-after(., 'HarryPotter:')"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Khi áp dụng trên tài liệu XML gốc:
<bookstore>
<book> HarryPotter:Chamber of Secrets </book>
<book> HarryPotter:Prisoners in Azkabahn </book>
</bookstore>
chuyển đổi này tạo ra kết quả mong muốn:
Phòng Bí mật
Tù nhân tại Azkabahn
Nguồn
2008-12-02 15:07:06
Ngược lại, XPath 1.0 * có * có chuỗi con sau: http://www.w3.org/TR/xpath/#function-substring-after –
@ Josh-Stodola, Tôi đã nói ở đâu rằng nó không có hàm substring-after()? XPath 1.0 * không cho phép * một hàm được chỉ định làm bước vị trí, hãy quan tâm xem đây có phải là chuỗi con sau() hay bất kỳ hàm nào khác không. Vui lòng hoàn nguyên * ghi chú * không đúng của bạn! –
Josh không biết Dimitre là ai :) – grantwparks