I. Đây XPath 2.0 biểu:
substring-after(tokenize($pUrl, '[?|&]')[starts-with(., 'v=')], 'v=')
tạo ra truy nã, chính xác kết quả.
Ngoài ra, người ta có thể sử dụng một chút ngắn hơn:
tokenize(tokenize($pUrl, '[?|&]')[starts-with(., 'v=')], '=')[2]
Đây là một hoàn XSLT 2.0 chuyển đổi:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:param name="pUrl" select=
"'http://www.youtube.com/watch?v=qadqO3TOvbQ&feature=channel&list=UL'"/>
<xsl:template match="/">
<xsl:sequence select=
"tokenize(tokenize($pUrl, '[?|&]')[starts-with(., 'v=')], '=')[2]"/>
</xsl:template>
</xsl:stylesheet>
Khi chuyển đổi này được áp dụng trên bất kỳ tài liệu XML (không được sử dụng), mong muốn, kết quả chính xác được tạo ra:
qadqO3TOvbQ
II. XPath 1.0 Biểu thức này:
concat
(substring-before(substring-after(concat($pUrl,'&'),'?v='),'&'),
substring-before(substring-after(concat($pUrl,'&'),'&v='),'&')
)
tạo ra kết quả mong muốn.
Do lưu ý:
Cả hai giải pháp trích xuất các chuỗi truy nã thậm chí nếu tham số chuỗi truy vấn tên v
không phải là người đầu tiên hoặc thậm chí trong trường hợp khi nó là người cuối cùng.
Vấn đề là tôi không biết liệu nó có kết thúc trong tính năng hay không ... người dùng sẽ chỉ sao chép url và mong đợi nó hoạt động. Công việc của tôi là phân tích bất cứ điều gì đến. Tôi đã suy nghĩ giữa? V = và & nhưng nó có thể không có dấu và. – Armstrongest
OK ... hoàn toàn +1 cho xmlplayground ... Trang web tuyệt vời. Ngoài ra, tôi đã sửa đổi giải pháp ở đó thành '\t 'để nắm bắt các URL thích hợp. –
Armstrongest
Cảm ơn - Tôi đã khởi chạy lại vài tuần trước.Spread da word :) Rất vui khi bạn có kết quả bạn cần. – Utkanos