Các giải pháp hiện đang được chọn:
//comment()/following-sibling::*[1]/self::item
không hoạt động trong trường hợp có một hướng dẫn khi xử lý (hoặc một nhóm toàn bộ hướng dẫn xử lý) giữa các comment và nguyên tố này - như nhận thấy trong một bình luận của Martin Honnen.
Giải pháp dưới đây không có vấn đề như vậy.
Biểu thức XPath sau đây chọn chỉ các yếu tố nút được một trong hai ngay trước bởi một nút bình luận, hoặc ngay lập tức trước bởi một nút văn bản trắng-không gian duy nhất, mà là ngay lập tức trước bởi một nút bình luận:
(//comment()
/following-sibling::node()
[1]
[self::text()
and
not(normalize-space())
]
/following-sibling::node()
[1] [self::item]
)
|
(//comment()
/following-sibling::node()
[1]
[self::item]
)
Dưới đây là một thử nghiệm hoàn chỉnh:
Chúng tôi sử dụng tài liệu XML này:
<root>
<list>
<!-- foo's comment -->
<item name="foo" />
<item name="bar" />
<!-- another foo's comment -->
<item name="another foo" />
<!-- comment 3 --><item name="immed.after 3"/>
<!-- comment 4 --><?PI ?><item name="after PI"/>
</list>
</root>
Khi việc chuyển đổi sau đây được áp dụng trên các tài liệu trên XML:
<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="/">
<xsl:copy-of select=
"
(//comment()
/following-sibling::node()
[1]
[self::text()
and
not(normalize-space())
]
/following-sibling::node()
[1] [self::item]
)
|
(//comment()
/following-sibling::node()
[1]
[self::item]
)
"/>
</xsl:template>
</xsl:stylesheet>
các truy nã, kết quả chính xác được sản xuất:
<item name="foo"/>
<item name="another foo"/>
<item name="immed.after 3"/>
Nguồn
2010-04-10 15:19:57
Lưu ý rằng trong mô hình dữ liệu XSLT/XPath những yếu tố mục bạn đang tìm kiếm một không ngay lập tức trước bởi một nút bình luận nhưng thay vì một nút văn bản với không gian màu trắng. Vì vậy, trừ khi bạn sử dụng ' ' trong bảng định kiểu của bạn, các nút văn bản không gian màu trắng này có thể cản trở bạn. –
Câu hỏi hay (+1). Xem câu trả lời của tôi cho giải pháp hoàn chỉnh (hiện tại). Nhận xét của Martin Honnen là chính xác và mặc dù câu trả lời được chọn hiện tại có thể làm việc cho bạn, nhưng nó có thể đột ngột ngừng làm như vậy (nếu công cụ XPath được cung cấp với một tài liệu XML, mà các nút chỉ trắng không bị tước đi). –