我尝试使用XSLT将XML文件转换为另一个XML,但我得到的只是一个空白页。
我试图转换此XML
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="xslt.xslt"?>
<ForskoleAnsokan>
<Vardnadshavare>
<Vardtagare>
<Fornamn>Arne</Fornamn>
<Efternamn>Jonsson</Efternamn>
<Personnummer>8802202220</Personnummer>
<Adress>Galavägen 13</Adress>
<Postnummer>46444</Postnummer>
<Postort>Trandhatan</Postort>
<Kontakt>072283832</Kontakt>
</Vardtagare>
<Vardtagare>
<Fornamn>Gunilla</Fornamn>
<Efternamn>Jonsson</Efternamn>
<Personnummer>8702102110</Personnummer>
<Adress>Galavägen 13</Adress>
<Postnummer>46444</Postnummer>
<Postort>Trandhatan</Postort>
<Kontakt>073262613</Kontakt>
</Vardtagare>
</Vardnadshavare>
</ForskoleAnsokan>
&#13;
使用此XSLT
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<begaranominkomstuppgift>
<xsl:for-each select="ForskoleAnsokan/Vardnadshavare/Vardtagare">
<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>
&#13;
进入这个xml
<begaranominkomstuppgift>
<person personnummer="8802202220">
<fornamn>Arne</fornamn>
<efternamn>Jonsson</efternamn>
</person>
<person personnummer="8702102110">
<fornamn>Gunilla</fornamn>
<efternamn>Jonsson</efternamn>
</person>
</begaranominkomstuppgift>
&#13;
但我得到的只是一个空白页
答案 0 :(得分:1)
将您的XSL更改为:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<begaranominkomstuppgift>
<xsl:for-each select="ForskoleAnsokan/Vardnadshavare/Vardtagare">
<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>
您在调用值中使用了属性访问器(@),但这些数据项只是元素,而不是属性。
答案 1 :(得分:1)
如果要显示文本,则需要将输出更改为html。将xslt.xsl文件更改为:
<xsl:template match="/">
<begaranominkomstuppgift>
<xsl:for-each select="ForskoleAnsokan/Vardnadshavare/Vardtagare">
<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>
请注意,我删除了@
,因为它们用于访问属性而非简单元素。
另请注意,您的xml实际上已经在转换,但正如您所说它显示为空白页面,我认为您正在尝试在浏览器中查看,然后需要将输出更改为html。例如,如果您检查页面,您将看到xml已输出。
另请注意,将输出更改为html将不会显示实际的XML,但会将其解释为html,然后输出一些内容。 要查看您的确切xml,只需右键单击该页面,然后点击“检查”。
另请注意,这不适用于chrome。