XPath:比较所有属性的第一个和最后一个以及 return 个唯一值
XPath: Compare first & last of all attributes & return unique values
我希望将所有第一个和最后一个属性相互比较,return 仅比较唯一值。
XML:
<way>
<nd ref="1"/>
<nd ref="2"/>
<nd ref="3"/>
<tag k="highway"/>
</way>
<way>
<nd ref="2"/>
<nd ref="3"/>
<nd ref="4"/>
<tag k="highway"/>
</way>
<way>
<nd ref="4"/>
<nd ref="6"/>
<nd ref="1"/>
<tag k="highway"/>
</way>
<way>
<nd ref="2"/>
<nd ref="4"/>
<nd ref="7"/>
<tag k="highway"/>
</way>
</osm>
预期输出:
<nd ref="3"/>
<nd ref="7"/>
我对 XSL 的了解不多。我一直在玩弄这两个 value-of
并且没走多远:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:variable name="LastRef" select="osm/way/nd"/>
<xsl:template match="/">
<!-- <xsl:value-of select="osm/way/nd[1]/@ref = osm/way/nd[last()]/@ref"/> -->
<xsl:value-of select="osm/way/nd[position() = 1 or position() = last()][not($LastRef)]"/>
</xsl:template>
</xsl:stylesheet>
我也一直在根据此页面查看 preceding::
:
https://www.oreilly.com/library/view/xslt-cookbook/0596003722/ch04s03.html
但我在黑暗中摸索。希望你能帮忙
我认为这听起来好像您想通过 ref
属性对那些 nd
元素(第一个和最后一个)进行分组,并且仅在它具有单个成员时才输出一个组,这可以是在 XSLT 2 或 3 中表示为
<xsl:template match="osm">
<xsl:for-each-group select="way/nd[position() = (1, last())]" group-by="@ref">
<xsl:sequence select=".[not(current-group()[2])]"/>
</xsl:for-each-group>
</xsl:template>
我希望将所有第一个和最后一个属性相互比较,return 仅比较唯一值。
XML:
<way>
<nd ref="1"/>
<nd ref="2"/>
<nd ref="3"/>
<tag k="highway"/>
</way>
<way>
<nd ref="2"/>
<nd ref="3"/>
<nd ref="4"/>
<tag k="highway"/>
</way>
<way>
<nd ref="4"/>
<nd ref="6"/>
<nd ref="1"/>
<tag k="highway"/>
</way>
<way>
<nd ref="2"/>
<nd ref="4"/>
<nd ref="7"/>
<tag k="highway"/>
</way>
</osm>
预期输出:
<nd ref="3"/>
<nd ref="7"/>
我对 XSL 的了解不多。我一直在玩弄这两个 value-of
并且没走多远:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:variable name="LastRef" select="osm/way/nd"/>
<xsl:template match="/">
<!-- <xsl:value-of select="osm/way/nd[1]/@ref = osm/way/nd[last()]/@ref"/> -->
<xsl:value-of select="osm/way/nd[position() = 1 or position() = last()][not($LastRef)]"/>
</xsl:template>
</xsl:stylesheet>
我也一直在根据此页面查看 preceding::
:
https://www.oreilly.com/library/view/xslt-cookbook/0596003722/ch04s03.html
但我在黑暗中摸索。希望你能帮忙
我认为这听起来好像您想通过 ref
属性对那些 nd
元素(第一个和最后一个)进行分组,并且仅在它具有单个成员时才输出一个组,这可以是在 XSLT 2 或 3 中表示为
<xsl:template match="osm">
<xsl:for-each-group select="way/nd[position() = (1, last())]" group-by="@ref">
<xsl:sequence select=".[not(current-group()[2])]"/>
</xsl:for-each-group>
</xsl:template>