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

Transforming XML to another XML with 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>

使用此 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>

进入这个xml

<begaranominkomstuppgift>
      <person personnummer="8802202220">
          <fornamn>Arne</fornamn>
          <efternamn>Jonsson</efternamn>
        
  </person>
      <person personnummer="8702102110">
          <fornamn>Gunilla</fornamn>
          <efternamn>Jonsson</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"
    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>

您在 value-of 调用中使用了属性访问器 (@),但那些数据项只是元素,而不是属性。

如果要显示文字,需要将输出改为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。