使用XSLT进行转换后,XML不会显示

时间:2016-08-10 13:30:11

标签: xml xslt

我希望使用XML转换来清理我的数据。

我的请求XML:

<Schools>
<SchoolName>
  <name>ABC International, Wisconsin</name>
  <rank>1</rank>
</SchoolName>
<SchoolName>
  <name>XYZ Primary, Las Vegas</name>
  <rank>1</rank>
</SchoolName>
<SchoolName>
  <name>Ryan Academy, Wisconsin</name>
  <rank>1</rank>
</SchoolName>
<SchoolName>
  <name>Advanced Elementary, Houston</name>
  <rank>1</rank>
</SchoolName>
</Schools>

XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">

      <xsl:for-each select="Schools/SchoolName[name[contains(text(),'Wisconsin')]and not(name[contains(text(),'Academy')])]">

    <xsl:value-of select="name" />
        <xsl:value-of select="rank" /> 
      </xsl:for-each>

</xsl:template>
</xsl:stylesheet>

输出我得到: ABC国际,威斯康星州1

我希望输出:

<Schools>
<SchoolName>
  <name>ABC International, Wisconsin</name>
  <rank>1</rank>
</SchoolName>
</Schools>

我应该在XSLT中修复什么来适应这种变化?

1 个答案:

答案 0 :(得分:0)

好吧,如果你想输出XML然后确保复制你感兴趣的节点或创建新的节点,复制应该足以满足你的用例:

<xsl:template match="Schools">
  <xsl:copy>
     <xsl:copy-of select="SchoolName[name[contains(.,'Wisconsin')]and not(name[contains(.,'Academy')])]"/>
  </xsl:copy>
</xsl:template>

但请注意,浏览器中的客户端XSLT不是XML的良好环境 - &gt; XML转换因此在XML编辑器或IDE中运行该代码以查看XML结果,浏览器可能只显示文本节点。