1

我有一个包含大约 1000 个用户的 XML 文件,结构如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="filter.xsl"?>
  <USERS>
    <USER>
      <ID>15492</ID>
      <USERNAME>0047</USERNAME>
      <ADDRESS>
        <FIRSTNAME>mr</FIRSTNAME>
        <LASTNAME>Dees</LASTNAME>
        <ORGANIZATION>WON Organization Name </ORGANIZATION>
        <EMAIL>email@address.com</EMAIL>
      </ADDRESS>
      <COMMERCEINFO>
        <PAYMENTMETHOD>MANUAL</PAYMENTMETHOD>
      </COMMERCEINFO>
      <ACCOUNT>
        <PASSWORD>72d7df914cc8806b2eb0fa0203f322d7</PASSWORD>
        <EXPIRES>1601-01-01</EXPIRES>
      </ACCOUNT>
       .
       .
       .
    </USER>
    <USER>
    ...
    </USER>
  </USERS>

我只需要查看<ORGANIZATION>元素以“WON”开头的用户。使用 IE8 打开 XML 文件,连接的 XSL 文件如下所示:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output indent="yes" />

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="USER[ADDRESS[ORGANIZATION[starts-with(.,'WON')]]]" />  
</xsl:stylesheet>

但是,使用这个我在 IE8 的页面源中看到的结果给所有用户,过滤器似乎不起作用。

4

1 回答 1

1

我对 XSLT 做了一个小的调整:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes" />
    <xsl:template match="/">
        <users>
            <xsl:apply-templates select="USERS/USER[ADDRESS[ORGANIZATION[starts-with(.,'WON')]]]"/>
        </users>
    </xsl:template>
    <xsl:template match="USER">
        <xsl:copy-of select="."/>
    </xsl:template>
</xsl:stylesheet>

这会导致仅<user>具有以“WON”开头的 ORGANIZATION 的节点。

但是,这不会更新源本身。您现在设置它的方式是让浏览器使用提供的 XSLT 解析 XML。
如果您希望源已经被转换,则必须使用 PHP、Java、ASP.Net 等服务器端语言。这些语言可以为您进行 XML/XSLT 转换,并将生成的 HTML 作为源输出网页。

于 2014-05-26T09:24:00.413 回答