Một trong những giải pháp đơn giản nhất cho câu hỏi của OP là biểu thức XPath sau:
*/*[.='bar']
Do lưu ý, rằng không có hướng dẫn XSLT là liên quan - đây chỉ là biểu thức XPath, vì vậy câu hỏi chỉ có thể được gắn thẻ XPath.
Từ đây, người ta có thể sử dụng biểu thức XPath này trong XSLT theo nhiều cách khác nhau, chẳng hạn như áp dụng mẫu trên tất cả các nút được chọn.
Ví dụ, dưới đây là một chuyển đổi XSLT mà mất tài liệu XML và sản xuất với nhau, trong đó tất cả các yếu tố - con của <AA>
có nội dung không phải là bằng "bar"
được xóa:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="AA">
<xsl:copy>
<xsl:apply-templates select="*[. = 'bar']"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Khi điều này chuyển đổi được áp dụng trên các tài liệu XML gốc:
<AA>
<BB>foo</BB>
<CC>bar</CC>
<DD>baz</DD>
<EE>bar</EE>
</AA>
kết quả mong muốn được sản xuất :
<AA>
<CC>bar</CC>
<EE>bar</EE>
</AA>
Do lưu ý:
Trong một mô hình phù hợp, chúng tôi thường không cần phải xác định một biểu thức XPath tuyệt đối, nhưng chỉ cần một cái tương đối, vì vậy biểu thức XPath đầy đủ là một cách tự nhiên đơn giản hóa để trận đấu này mẫu:
*[. = 'bar']
Nguồn
2009-04-05 14:54:26
Cảm ơn! Bài đăng khác của bạn cũng hữu ích, vì tiện ích mở rộng tiếp theo sẽ sử dụng cụm từ thông dụng cho lựa chọn: http://stackoverflow.com/questions/539781/xpath-search-based-on-dynamic-regular-expressions – krasnaya
@zhen Không có chi. Chỉ cần nhớ rằng giải pháp RegEx nằm trong XPath 2.0 - không có cách nào thuận tiện để thực hiện điều này trong XPath 1.0 –