<page>
<tab dim="70"></tab>
<tab dim="40"></tab>
<tab dim="30"></tab>
<tab dim="30"></tab>
<tab dim="30"></tab>
<tab dim="70"></tab>
</page>
如何获取标签的暗属性的值,并使用xslt.means拿出不同的值打印不同的值,它会打印30,40,70采取属性节点,并使用XSLT
<page>
<tab dim="70"></tab>
<tab dim="40"></tab>
<tab dim="30"></tab>
<tab dim="30"></tab>
<tab dim="30"></tab>
<tab dim="70"></tab>
</page>
如何获取标签的暗属性的值,并使用xslt.means拿出不同的值打印不同的值,它会打印30,40,70采取属性节点,并使用XSLT
要选择不同属性值,你可以使用这个XPath:
/page/tab[not(@dim=preceding-sibling::tab/@dim)]/@dim
可能的XSLT模板将
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:for-each select="/page/tab[not(@dim=preceding-sibling::tab/@dim)]/@dim">
<xsl:sort select="." data-type="number"/>
<xsl:value-of select="concat(., substring(',', 2 - (position() != last())))"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
到transform the source document with the stylesheet in PHP,您可以使用:
$xml = new DOMDocument;
$xml->load('collection.xml');
$xsl = new DOMDocument;
$xsl->load('collection.xsl');
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);
echo $proc->transformToXML($xml);
这将产生30,40,70的输出。
你可以简单地做实现无XSLT相同:
$page = simplexml_load_file('NewFile.xml');
$dims = $page->xpath('/page/tab[not(@dim=preceding-sibling::tab/@dim)]/@dim');
$dims = array_map('strval', $dims);
sort($dims);
echo implode(',', $dims);
另见
使用preceding-sibling::someName
进行分组的速度非常慢(O(N^2) - 二次方),并且可能无法在大型节点集上使用。
下面是一个简单和最有效的Muenchian grouping解决方案:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:key name="kTabByDim" match="tab" use="@dim"/>
<xsl:template match="/*">
<xsl:apply-templates select=
"tab[generate-id()=generate-id(key('kTabByDim',@dim)[1])]">
<xsl:sort select="@dim" data-type="number"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="tab">
<xsl:if test="position() >1">,</xsl:if>
<xsl:value-of select="@dim"/>
</xsl:template>
</xsl:stylesheet>
当这种变换所提供的XML文档应用:
<page>
<tab dim="70"></tab>
<tab dim="40"></tab>
<tab dim="30"></tab>
<tab dim="30"></tab>
<tab dim="30"></tab>
<tab dim="70"></tab>
</page>
想要的,正确的结果是产生:
30,40,70
你可以参考任何资源。这样我可以看得更远? – varuog