使用XSLT将XML转换为另一个XML

时间:2015-01-13 18:34:26

标签: xml xslt

我尝试使用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;
&#13;
&#13;

使用此XSLT

&#13;
&#13;
<?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;
&#13;
&#13;

进入这个xml

&#13;
&#13;
<begaranominkomstuppgift>
      <person personnummer="8802202220">
          <fornamn>Arne</fornamn>
          <efternamn>Jonsson</efternamn>
        
  </person>
      <person personnummer="8702102110">
          <fornamn>Gunilla</fornamn>
          <efternamn>Jonsson</efternamn>
        
  </person>
</begaranominkomstuppgift>
&#13;
&#13;
&#13;

但我得到的只是一个空白页

2 个答案:

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