【发布时间】:2011-05-07 06:00:58
【问题描述】:
好的,我在试图让它发挥作用时遇到了一个完整的心理障碍,并且想知道是否有其他人能够理解它。我对 HTML 有以下结构。
<?xml version="1.0" encoding="utf-8"?>
<root>
<listing>
<name>Frank Spencer</name>
<dob>2010-09-01</dob>
<details>
<firmname>Scotts</firmname>
<address>Blah Blah</address>
<businessname>Scotts</businessname>
<businessaddress>Blahdeblah</businessaddress>
</details>
<details>
<firmname>Scotts</firmname>
<address>Blah Blah</address>
<businessname>Wilson and Son</businessname>
<businessaddress>Blahdeblah</businessaddress>
</details>
<details>
<firmname>Wilson and Son</firmname>
<address>Blah Blah</address>
<businessname>Brudebakers</businessname>
<businessaddress>Blahdeblah</businessaddress>
</details>
<details>
<firmname>Carnage and Co.</firmname>
<address>Blah Blah</address>
<businessname>Brudebakers</businessname>
<businessaddress>Blahdeblah</businessaddress>
</details>
</listing>
<listing>
<name>Han Solo</name>
<dob>2010-09-01</dob>
<details>
<firmname>Independent trading</firmname>
<address>Blah Blah</address>
<businessname>Fugitive freight</businessname>
<businessaddress>Blahdeblah</businessaddress>
</details>
<details>
<firmname>Scotts</firmname>
<address>Blah Blah</address>
<businessname>Wilson and Son</businessname>
<businessaddress>Blahdeblah</businessaddress>
</details>
<details>
<firmname>Wilson and Son</firmname>
<address>Blah Blah</address>
<businessname>Scotts</businessname>
<businessaddress>Blahdeblah</businessaddress>
</details>
<details>
<firmname>Carnage and Co.</firmname>
<address>Blah Blah</address>
<businessname>Brudebakers</businessname>
<businessaddress>Blahdeblah</businessaddress>
</details>
</listing>
</root>
使用以下 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="html" indent="yes"/>
<xsl:param name="searchName">Wilson</xsl:param>
<xsl:param name="searchName2"></xsl:param>
<xsl:variable name="Uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:variable name="Lowercase" select="'abcdefghijklmnopqrstuvwxyz'"/>
<xsl:template match="/">
<xsl:for-each select="root/listing">
<p>Name: <xsl:value-of select="name"/></p>
<p>DOB: <xsl:value-of select="dob" /></p>
<xsl:for-each select="details[not(firmname=following::root/listing/details/firmname) and not(businessname=following::root/listing/details/businessname) or not(firmname=following::root/listing/details/businessname) or not(businessname=following::root/listing/details/firmname)]">
<xsl:choose>
<xsl:when test="contains(translate(firmname,$Uppercase,$Lowercase), translate($searchName,$Uppercase,$Lowercase)) and contains(translate(businessname,$Uppercase,$Lowercase), translate($searchName,$Uppercase,$Lowercase)) and not($searchName = '')">
(This individual has previously worked at:
<xsl:value-of select="firmname" />
</xsl:when>
<xsl:when test="contains(translate(businessname,$Uppercase,$Lowercase), translate($searchName,$Uppercase,$Lowercase)) and not(contains(translate(firmname,$Uppercase,$Lowercase), translate($searchName,$Uppercase,$Lowercase))) and not($searchName = '')">
(This individual has previously worked at:
<xsl:value-of select="businessname" />)
</xsl:when>
<xsl:when test="contains(translate(firmname,$Uppercase,$Lowercase), translate($searchName,$Uppercase,$Lowercase)) and not(contains(translate(businessname,$Uppercase,$Lowercase), translate($searchName,$Uppercase,$Lowercase))) and not($searchName = '')">
(This individual has previously worked at:
<xsl:value-of select="firmname" />)<br/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我想要的是获得包含搜索词的公司列表。但我得到的是:
姓名:弗兰克·斯宾塞 出生日期:2010-09-01 (此人之前曾在:Wilson and Son) (此人之前曾在:Wilson and Son) 姓名:韩索罗 出生日期:2010-09-01 (此人之前曾在:Wilson and Son) (此人之前曾在:Wilson and Son)xslt 应该同时查看公司名称和企业名称,然后如果它找到与包含匹配的内容,它应该只打印出一个引用。但我似乎无法让它工作。有没有人有任何解决方案/建议?理想的结果是。
<body>
<p>Name: Frank Spencer</p>
<p>DOB: 2010-09-01</p>
<p>(This individual has previously worked at: Wilson and Son)</p>
<p>Name: Han Solo</p>
<p>DOB: 2010-09-01</p>
<p>(This individual has previously worked at: Wilson and Son)</p>
</body>
【问题讨论】:
-
正确缩进和删除不相关的部分确实有助于阅读这个问题并理解问题。
-
你说得对,我在 XML 文档中添加了缩进并分解了 XSLT 的大量内容。感谢您的建议。
-
此处解释了使用 XSLT 1.0 进行分组:jenitennison.com/xslt/grouping/index.xml。它也可以用来消除重复。考虑发布格式良好的 XML 输入示例以及您希望使用 XSLT 生成的相应 HTML 输出。
标签: xml xslt sorting duplicates selection