所以我已经达到了我自己似乎无法解决问题的程度。 我必须转换这个XML代码:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="xml.xsl"?>
<ansokan>
<forskolaNamn>FakeFörskola</forskolaNamn>
<barn personnummer="1234567890">
<namn>Abc</namn>
<allergi>Räkor</allergi>
<övrigt> </övrigt>
</barn>
<syskon personnummer="1678901234">
<namn>ABCs Bror</namn>
</syskon>
<vardnadshavare personnummer="1456789012">
<fornamn>ABCs</fornamn>
<efternamn>Vårdnadsavare1</efternamn>
<adress>Fake Street</adress>
<telefon hem="031111111" mobil="0731234567"/>
<e-post>Vårdnadsavare1@gmail.com</e-post>
</vardnadshavare>
<vardnadshavare personnummer="1789012345">
<fornamn>ABCs</fornamn>
<efternamn>Vårdnadsavare2</efternamn>
<adress>FakeFake Street</adress>
<telefon hem="031333333" />
<e-post>Vårdnadsavare2@gmail.com</e-post>
</vardnadshavare>
</ansokan>
所有这些元素和属性只应在元素&#34; vardnadshavare&#34; 中输出属性&#34; Personnumer&#34; , fornamn 和 efternamn 。像这样:
<begaranominkomstuppgift>
<person personnummer="1456789012">
<fornamn>ABCs</fornamn>
<efternamn>Vårdnadsavare1</efternamn>
</person>
<person personnummer="1789012345">
<fornamn>ABCs</fornamn>
<efternamn>Vårdnadsavare2</efternamn>
</person>
</begaranominkomstuppgift>
这是我的XSL代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="ansokningar">
<begaranominkomstuppgift>
<xsl:for-each select="ansokan/vardnadshavare">
<person>
<xsl:attribute name="personnummer">
<xsl:value-of select="@personnummer"/>
</xsl:attribute>
<fornamn>
<xsl:value-of select="fornamn"/>
</fornamn>
<efternamn>
<xsl:value-of select="efternamn"/>
</efternamn>
</person>
</xsl:for-each>
</begaranominkomstuppgift>
</xsl:template>
</xsl:stylesheet>
测试代码时没有任何结果。顺便说一下,XML代码已经过验证。
答案 0 :(得分:1)
答案 1 :(得分:1)
我想添加略有不同的方法,因为我更喜欢for-each
以外的模板:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<!-- start out with document root template -->
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<!-- match new root element -->
<xsl:template match="ansokan">
<xsl:element name="begaranominkomstuppgift">
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<!-- match new person element -->
<xsl:template match="vardnadshavare">
<xsl:element name="person">
<xsl:attribute name="personnummer">
<xsl:value-of select="./@personnummer" />
</xsl:attribute>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<!-- empty templates for those elements to ignore -->
<xsl:template match="forskolaNamn" />
<xsl:template match="barn" />
<xsl:template match="syskon" />
<xsl:template match="adress" />
<xsl:template match="telefon" />
<xsl:template match="e-post" />
<!-- identity template for copying those elements that need no transformation -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>