Dưới đây là một XSLT 1.0 stylesheet rằng sẽ làm những gì bạn hỏi:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Identity transform -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Name">
<xsl:copy-of select="."/>
<Age>34</Age>
</xsl:template>
<xsl:template match="Dept">
<xsl:copy-of select="."/>
<Domain>Insurance</Domain>
</xsl:template>
</xsl:stylesheet>
Rõ ràng logic sẽ thay đổi tùy thuộc vào nơi bạn sẽ nhận được các dữ liệu mới từ, và nơi mà nó cần phải đi. Biểu định kiểu trên chỉ cần chèn phần tử <Age>
sau mỗi phần tử <Name>
và phần tử <Domain>
sau mỗi phần tử <Dept>
.
(Giới hạn:. Nếu tài liệu của bạn có thể có <Name>
hoặc <Dept>
yếu tố bên trong <Name>
hoặc <Dept>
các yếu tố khác, chỉ có những người ngoài cùng sẽ phải xử lý đặc biệt này, tôi không nghĩ rằng bạn có ý định cho tài liệu của bạn để có loại cấu trúc đệ quy Vì vậy, nó sẽ không ảnh hưởng đến bạn, nhưng nó đáng nhắc đến chỉ trong trường hợp.)
gì nếu bạn chỉ muốn phần tử được thêm một lần, thay vì một lần cho tất cả các yếu tố Tên/Dept? – Joe
@Joe: Wow, gần 5 năm sau. :-) Trong trường hợp đó, bạn thêm phần tử kết quả vào mẫu sẽ chỉ khớp một lần. Ví dụ. 'match ="/*/Name [1] "'. – LarsH
Tuyệt vời, tôi đã không thực sự mong đợi một câu trả lời 5 năm sau đó, ít hơn một để nhắc! Điều đó giúp ích rất nhiều – Joe