8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

使用@attribute创建一个键,但通过这个@attributes的首字母进行扫描

dasEgo 2月前

112 0

我正在使用 XSLT 1.0I 转换以下 xml 文件:

我正在使用 XSLT 1.0I 转换以下 xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test_1.xsl"?>
 <Features>
  <Feature item="a1" area="1"></Feature>
  <Feature item="a1" area="1"></Feature>
  <Feature item="a2" area="1"></Feature>
  <Feature item="a2" area="1"></Feature>
  <Feature item="b1" area="1"></Feature>
  <Feature item="b1" area="1"></Feature>
  <Feature item="b2" area="1"></Feature>
 </Features>

通过此 xsl 文件:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">     
<xsl:key name="KeyStyle" match="Feature" use="@style"/>
<xsl:key name="KeyItem" match="Feature" use="@item"/>
 <xsl:template match="Features">
  <html>
    <xsl:for-each select="Feature[generate-id() = generate-id(key('KeyStyle',@style)[1])]">   
    <xsl:sort select="@style" order="ascending"/> 
     Table for style (<xsl:value-of select="@style"/>)
     <xsl:for-each select="key('KeyStyle',@style)">
     <xsl:sort select="@item" order="ascending"/>
      <xsl:if test="not(preceding::*[@item = current()/@item])">
       <p>Style=<xsl:value-of select="@style"/></p>  
       <p>Item=<xsl:value-of select="@item"/></p>  
       <p>TotalAreaOf_Items (<xsl:value-of select="@item"/>)=<xsl:value-of select="sum(key('KeyItem',@item)/@area)"/></p> 
       </xsl:if>
      </xsl:for-each> ----------
      <br/><br/>
    </xsl:for-each>
  </html>
 </xsl:template>
</xsl:stylesheet>

获得此输出:

<html> 
 Table for style (a)
  <p>Item=a1</p>
  <p>TotalAreaOf_Items (a1)=4</p>
  <p>Item=a2</p>
  <p>TotalAreaOf_Items (a2)=4</p>
  -----------------
 Table for style (b)
  <p>Item=b1</p>
  <p>TotalAreaOf_Items (b1)=3</p>
  <p>Item=b2</p>
  <p>TotalAreaOf_Items (b2)=3</p>
</html>

由于 substring(@item, 1, 1) 语句扫描所有 (a) 项目而忽略 (a) 之后的内容,因此我显然得到了以 (a) 开头的所有项目的总和:TotalAreaOf_Items (a1)=4 和 TotalAreaOf_Items (a2)=4

而不是所需的:TotalAreaOf_Items(a1)= 2 和 TotalAreaOf_Items(a2)= 2

我尝试处理

帖子版权声明 1、本帖标题:使用@attribute创建一个键,但通过这个@attributes的首字母进行扫描
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由dasEgo在本站《xml》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 你说得对。在这种情况下,你需要添加两次命名空间。如果你从 createElement() 中省略 ns 参数,那么 setPrefix() 不会自行执行此操作。构建 XML 引擎的方式非常奇怪。

返回
作者最近主题: