我有一个XML文件,可容纳大约1000个用户,并具有以下结构:
<?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页面源中看到的结果给所有用户,过滤器似乎不起作用。
答案 0 :(得分: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>
个节点的ORGANIZATION以&#39; WON&#39;开头。
但是,这不会更新源本身。您现在设置它的方式是浏览器使用提供的XSLT解析XML。
如果您想要转换源,您必须使用PHP,Java,ASP.Net等服务器端语言。这些语言可以为您进行XML / XSLT转换,并输出生成的HTML作为网页来源。