在xml中注入时xslt不工作

时间:2013-12-06 14:29:08

标签: xslt

我是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="/">
 &lt;  xml version="1.0"?  &gt; 
  &lt;  RECORDS  &gt; 
  &lt;  RECORD  &gt; 
     <xsl:for-each select="document/asset/attribute">
        &lt;  PROP NAME="<xsl:value-of select="@name"/>"  &gt; 
           &lt;  PVAL  &gt;  <xsl:value-of select="string/@value"/>  &lt;  /PVAL  &gt; 
          &lt;  /PROP  &gt; 
     </xsl:for-each>
  &lt; /RECORD  &gt; 
  &lt; /RECORDS  &gt; 
</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="&#60;p&#62;&#13;&#10;&#9;&#38;lt;div class=&#38;quot;container&#38;quot;&#38;gt;&#38;nbsp;&#38;nbsp;&#38;lt;div class=&#38;quot;four columns&#38;quot;&#38;gt; &#38;lt;div id=&#38;quot;info&#38;quot;&#38;gt; &#38;lt;h3&#38;gt;Information&#38;lt;/h3&#38;gt; &#38;lt;ul&#38;gt; &#38;lt;li&#38;gt;&#38;lt;a href=&#38;quot;siteLink:company/aboutUs.jsp&#38;quot;&#38;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> 

1 个答案:

答案 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>