tôi đã có một số XML mà tuyên bố một không gian tên mà chỉ được sử dụng cho các thuộc tính, như thế này:XSL - sao chép các yếu tố nhưng loại bỏ không gian tên sử dụng (s)
<?xml version="1.0" encoding="UTF-8"?>
<a xmlns:x="http://tempuri.com">
<b>
<c x:att="true"/>
<d>hello</d>
</b>
</a>
Tôi muốn sử dụng XSL để tạo ra một bản sao các nút đã chọn và giá trị của chúng - loại bỏ các thuộc tính. Vì vậy, đầu ra mong muốn của tôi là:
<?xml version="1.0" encoding="UTF-8"?>
<b>
<c />
<d>hello</d>
</b>
tôi đã có một số XSL rằng hầu hết thực hiện điều này, nhưng tôi dường như không thể ngăn chặn nó đưa tờ khai không gian tên trong thành phần cấp cao nhất của đầu ra. XSL của tôi là:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:apply-templates select="https://stackoverflow.com/a/b"/>
</xsl:template>
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Yếu tố đầu tiên của đầu ra là <b xmlns:x="http://tempuri.com">
thay vì <b>
. Tôi đã cố gắng tuyên bố không gian tên trong XSL và đặt tiền tố trong danh sách exclude-result-prefixes
, nhưng điều này dường như không có bất kỳ ảnh hưởng nào. Tôi đang làm gì sai?
CẬP NHẬT: Tôi đã tìm thấy rằng bằng cách khai báo không gian tên trong XSL và sử dụng thuộc tính extension-element-prefixes
hoạt động, nhưng điều này có vẻ không đúng! Tôi đoán tôi có thể sử dụng điều này, nhưng tôi muốn biết tại sao exclude-result-prefixes
không hoạt động!
CẬP NHẬT: Thực ra, có vẻ như giải pháp extension-element-prefixes
này chỉ hoạt động với công cụ XSLT tích hợp của XMLSpy, không phải với MSXML.
Thanks, điều này không làm việc (mặc dù "@ *" mẫu dường như không được yêu cầu), nhưng tôi nghĩ rằng "địa phương-name () "Chức năng khá chậm ..? –
Tôi muốn XSLT 2.0! – Riri
Gần như hoàn hảo, nhưng thuộc tính x: att bị thiếu từ đầu ra. Mẫu "@ *" không được gọi. Thử thêm xsl: for-each> trực tiếp trước . –