Temel olarak çıkışı iki farklı xslt dönüştürmesinden birleştirmem gerekiyor.İki listenin xslt
iki iç XSLTs ithalat ve birleştirmek için "container.xslt" kullanıyorum: Bir xslt takım program tarafından
iki dönüşümü dosyaları oluşturulur "transform1.xslt" ve "transform2.xslt" so Onlarda değişiklik yapmaktan kaçınmak istiyorum.
<fields>
<field name="ID1">
<value>11111111</value>
</field>
<field name="ID2">
<value>11111111</value>
</field>
</fields>
: Burada
<fields>
<fields>
<field name="ID1">
<value>11111111</value>
</field>
</fields>
<fields>
<field name="ID2">
<value>11111111</value>
</field>
</fields>
</fields>
aradığım çıktısı:
<Enrollments>
<Enrollment>
<MEDICAL id="11111111">
</MEDICAL>
</Enrollment>
</Enrollments>
Bu şu anda alıyorum çıktısı:
Bu
benim giriş xml olduğunucontainer.xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="xs fn">
<xsl:include href="./transform1.xslt"/>
<xsl:include href="./transform2.xslt"/>
<xsl:output method="xml" encoding="UTF-8" byte-order-mark="no" indent="yes"/>
<xsl:variable name="list1">
<xsl:call-template name="one" />
</xsl:variable>
<xsl:param name="list2">
<xsl:call-template name="two"/>
</xsl:param>
<xsl:template name="mergedList" match="/">
<fields>
<xsl:copy-of select="$list1" />
<xsl:copy-of select="$list2" />
</fields>
</xsl:template>
</xsl:stylesheet>
transform1.xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="fn">
<xsl:output method="xml" encoding="UTF-8" byte-order-mark="no" indent="yes"/>
<xsl:template match="/" name="one">
<fields>
<field>
<xsl:attribute name="name" select="'ID1'"/>
<xsl:for-each select="Enrollments/Enrollment/MEDICAL">
<value>
<xsl:sequence select="fn:string(@id)"/>
</value>
</xsl:for-each>
</field>
</fields>
</xsl:template>
</xsl:stylesheet>
transform2.xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="fn">
<xsl:output method="xml" encoding="UTF-8" byte-order-mark="no" indent="yes"/>
<xsl:template match="/" name="two">
<fields>
<field>
<xsl:attribute name="name" select="'ID2'"/>
<xsl:for-each select="Enrollments/Enrollment/MEDICAL">
<value>
<xsl:sequence select="fn:string(@id)"/>
</value>
</xsl:for-each>
</field>
</fields>
</xsl:template>
</xsl:stylesheet>
Tamamen başka bir soru ait olabilir, ama ben durumda herkes buradan ekleyeceğiz bir önerisi var. Container.xslt dosyasında adlandırılmış şablonlar kullanmama izin vermek için bu iki satırı transform dosyalarıma eklemeliydim. Herhangi Önerileriniz için şimdiden ithal XLST
<xsl:attribute name="name" select="'ID1'"/>
ve
<xsl:attribute name="name" select="'ID2'"/>
sayesinde değişen önlemek için ideal olacaktır! Ben xslt için oldukça yeni ve çok el yazmadim.
Çok fazla mühendislik göründüğünü kabul ediyorum. Mümkün olduğu kadar genel bir örnek yapmak için iki içe aktarılmış xslts'i basitleştirdim. İki xslts dönüşümünü çalıştırmanın ve çıktıları birleştirmenin bir yoluna ihtiyacım var. Öneri için teşekkürler, ama sorumun kök sorununa ulaşmıyor.(belki de nasıl istediğimden dolayı: -]) – WannaBeDev
Ah. Değiştirilmiş cevaba bakınız. – Tomalak
Fantastik, çok teşekkürler! Basit bir şey olduğunu düşündüm. $ List1/fields $ list1/fields/alan – WannaBeDev