Tôi có một tài liệu XML với các phần tử không có tên và tôi muốn sử dụng XSLT để thêm các không gian tên cho các phần tử đó. Hầu hết các phần tử sẽ nằm trong không gian tên A; một số sẽ nằm trong không gian tên B. Làm thế nào để tôi làm điều này?Thêm không gian tên cho các phần tử
Trả lời
Với foo.xml
<foo x="1">
<bar y="2">
<baz z="3"/>
</bar>
<a-special-element n="8"/>
</foo>
và foo.xsl
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="A" >
<xsl:copy-of select="attribute::*"/>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<xsl:template match="a-special-element">
<B:a-special-element xmlns:B="B">
<xsl:apply-templates match="children()"/>
</B:a-special-element>
</xsl:template>
</xsl:transform>
tôi nhận được
<foo xmlns="A" x="1">
<bar y="2">
<baz z="3"/>
</bar>
<B:a-special-element xmlns:B="B"/>
</foo>
Là những gì bạn đang tìm kiếm?
Dưới đây là những gì tôi có cho đến nay:
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="A" >
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<xsl:template match="a-special-element">
<B:a-special-element xmlns:B="B">
<xsl:apply-templates />
</B:a-special-element>
</xsl:template>
này hầu như làm việc; vấn đề là nó không sao chép các thuộc tính. Từ những gì tôi đã đọc như vậy, phần tử xsl: không có cách nào để sao chép tất cả các thuộc tính từ phần tử như là (sử dụng-thuộc tính-bộ không xuất hiện để cắt nó).
Bạn chưa đọc tài liệu phù hợp. Sử dụng lực, đọc thông số kỹ thuật, nó được viết rất tốt và có thể truy cập được. – ddaa
Bạn sẽ cần hai thành phần chính cho công thức này.
Cổ phần nước sốt sẽ là identity transform và hương vị chính sẽ được cung cấp bởi thuộc tính namespace
đến xsl:element
.
Mã sau, chưa được kiểm tra, nên thêm không gian tên http://example.com/ vào tất cả các phần tử.
<xsl:template match="*">
<xsl:element name="xmpl:{local-name()}" namespace="http://example.com/">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
Tin nhắn cá nhân: Xin chào, Jeni Tennison. Tôi biết bạn đang đọc cái này.
- 1. JAXB thêm không gian tên cho cha mẹ nhưng không cho các phần tử con chứa
- 2. không gian tên tag0 được thêm vào cho các phần tử trong không gian tên mặc định
- 3. Phần tử XML có tên 'tên' từ tham chiếu không gian tên các loại riêng biệt
- 4. Không gian tên thẻ gốc XSLT thay vì không gian tên thuộc tính phần tử
- 5. Làm cách nào để thêm nhiều không gian tên vào phần tử gốc bằng XmlDocument?
- 6. Sử dụng nhiều không gian tên trong phần tử html
- 7. thêm các phần tử XML
- 8. Làm thế nào để nói lxml.etree.tostring (phần tử) không viết các không gian tên trong python?
- 9. quy ước đặt tên cho các phần tử html
- 10. Làm thế nào để viết các thuộc tính phần tử không gian tên với LXML?
- 11. css - không gian dọc được thêm vào các phần tử có hiển thị: inline-block
- 12. Thêm biến vào các phần tử DOM
- 13. Symfony 2: Thêm một không gian tên khác vào các không gian tên thực thể
- 14. Thêm các phần tử của một mảng
- 15. Thêm các phần tử từ hai Bộ
- 16. thêm tên lớp vào phần tử trong tệp uibinder xml
- 17. Các không gian tên DomDocument là gì?
- 18. Không gian tên cho [DataContract]
- 19. Làm cách nào để thêm không gian tên và tiền tố cho tất cả các phần tử và thuộc tính bằng cách sử dụng XSLT?
- 20. Có phần tử tên XSLT không?
- 21. Thêm phần tử vào phần tử cuối cùng của mảng
- 22. Thêm phần tử vào đầu phần tử nhóm
- 23. Thêm loại vào không gian tên std
- 24. Đổi tên các không gian tên
- 25. Tạo một tài liệu XML có phần tử gốc không gian tên với trình tạo Nokogiri
- 26. phần tử XML có không gian tên, XPATH tôi không hoạt động
- 27. Thêm không gian tên cho một SyndicationFeed chứ không phải là yếu tố cá nhân?
- 28. jQuery: Thêm phần tử sau phần tử thứ n
- 29. Xóa phần đệm cho phần tử trống
- 30. thủ thuật cho các phần tử nổi bên trong các phần tử danh sách
Yup; Tôi đã Google trả lời câu trả lời trước bài đăng của bạn và về cơ bản nó giống nhau. Một sự khác biệt là tôi đang sử dụng thay vào đó, nhưng tôi tin rằng chúng giống hệt nhau về mặt chức năng. –