我是XSLT的新手,我正在尝试将一个xml文件转换为输出另一个xml文件,但是当我在xml中注入xsl时,它无论如何都无法正常工作。当我在IE中打开它时,XML显示为空白。
我正在使用以下xslt代码: -
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="http://some-internal-thing/user" >
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/">
<RECORDS>
<RECORD>
<xsl:for-each select="document/asset/attribute">
<xsl:attribute name="PROP NAME"> ="<xsl:value-of select="@name"/>"</xsl:attribute>
<xsl:attribute name="PVAL"/> <xsl:value-of select="string/@value"/><xsl:attribute name="/PVAL"/>
<xsl:attribute name="/PROP"/>
</xsl:for-each>
</RECORD>
</RECORDS>
</xsl:template>
</xsl:stylesheet>
以下xslt正在运行,但是浏览器没有显示正确的XML。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="no" method="html" indent="yes" />
<xsl:template match="/">
< xml version="1.0"? >
< RECORDS >
< RECORD >
<xsl:for-each select="document/asset/attribute">
< PROP NAME="<xsl:value-of select="@name"/>" >
< PVAL > <xsl:value-of select="string/@value"/> < /PVAL >
< /PROP >
</xsl:for-each>
< /RECORD >
< /RECORDS >
</xsl:template>
</xsl:stylesheet>
XML如下: -
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="myxslCopy.xsl"?>
<document>
<asset id="1385567968442" type="TAISHtmlContent">
<attribute name="createdby"><string value="fwadmin"/></attribute>
<attribute name="category"><string value="g"/></attribute>
<attribute name="Publist"><array>
<integer value="1385571110545"/></array>
</attribute>
<attribute name="content"><string value="<p> 	&lt;div class=&quot;container&quot;&gt;&nbsp;&nbsp;&lt;div class=&quot;four columns&quot;&gt; &lt;div id=&quot;info&quot;&gt; &lt;h3&gt;Information&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;siteLink:company/aboutUs.jsp&quot;&gt;About
</attribute>
<attribute name="createddate"><date value="2013-12-03 15:06:54.442"/></attribute>
<attribute name="updateddate"><date value="2013-12-03 15:09:00.422"/></attribute>
<attribute name="active"><integer value="1"/></attribute>
<attribute name="fw_uid"><string value="d651728f-fe72-4ab3-9e63-684d979f62c9"/></attribute>
</asset>
</document>
必需的输出:
<RECORDS>
<RECORD>
<PROP NAME="createdby">
<PVAL>fwadmin</PVAL>
</PROP>
<PROP NAME="category">
<PVAL>g</PVAL>
</PROP>
<RECORD>
</RECORDS>
答案 0 :(得分:0)
如果你可以切换到XSLT 2.0(Saxton 9。?。?) 然后你可以使用这段代码:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://some-internal-thing/user" >
<xsl:output method="xml" version="1.0" encoding="UTF-8"
indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/">
<RECORDS>
<RECORD>
<xsl:for-each select="document/asset/attribute">
<PROP>
<xsl:attribute name="NAME" select="@name"></xsl:attribute>
<PVAL>
<xsl:value-of select="string/@value"></xsl:value-of>
</PVAL>
</PROP>
</xsl:for-each>
</RECORD>
</RECORDS>
</xsl:template>
</xsl:stylesheet>
如果必须使用XSLT 1.0 然后尝试以下代码:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://some-internal-thing/user" >
<xsl:output method="xml" version="1.0" encoding="UTF-8"
indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/">
<RECORDS>
<RECORD>
<xsl:for-each select="document/asset/attribute">
<PROP>
<xsl:attribute name="NAME">
<xsl:value-of select="@name"/>
</xsl:attribute>
<PVAL>
<xsl:value-of select="string/@value"></xsl:value-of>
</PVAL>
</PROP>
</xsl:for-each>
</RECORD>
</RECORDS>
</xsl:template>
</xsl:stylesheet>