我的xml以下。
$(document).ready(function() {
/* activate jquery isotope */
var $container = $('#posts').isotope({
isFitWidth: true,
itemSelector : '.item',
});
$container.isotope({ filter: '*' });
// filter items on button click
$('#filters').on( 'click', 'button', function() {
var filterValue = $(this).attr('data-filter');
$container.isotope({ filter: filterValue });
});
});
我正在努力实现以下输出。我认为,逻辑将有两个变量,并且对于每个出现,子串最后一部分并指定min和max,最后concat前3部分+(点)+ min +( - )+ max。有任何建议,如何为它编写xsl?
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<ip_address action="del">192.100.200.323</ip_address>
<ip_address action="del">192.100.200.324</ip_address>
<ip_address action="del">192.100.200.325</ip_address>
<ip_address action="del">192.100.200.326</ip_address>
<ip_address action="del">192.100.200.327</ip_address>
</Data>
答案 0 :(得分:0)
这是一个基于以下假设的选项:
如果缺少范围内的ip,我也会假设输出应该是什么样的。这应该至少是一个开始。
XML输入
<Data>
<ip_address action="del">192.100.200.323</ip_address>
<ip_address action="del">192.100.200.324</ip_address>
<ip_address action="del">192.100.200.325</ip_address>
<ip_address action="del">192.100.200.326</ip_address>
<ip_address action="del">192.100.200.327</ip_address>
</Data>
XSLT 2.0
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:template>
<xsl:template match="Data">
<xsl:copy>
<xsl:for-each-group select="ip_address"
group-by="replace(normalize-space(),'\d+$','')">
<xsl:variable name="base" select="current-grouping-key()"/>
<xsl:variable name="no-base">
<xsl:for-each select="current-group()">
<ip>
<xsl:value-of
select="replace(normalize-space(),current-grouping-key(),'')"/>
</ip>
</xsl:for-each>
</xsl:variable>
<xsl:for-each-group select="$no-base/ip"
group-starting-with="ip[preceding-sibling::ip[1] + 1 != .]">
<ip_address>
<xsl:value-of
select="if (current-group()[1]=current-group()[last()]) then
concat($base,current-group()[1]) else
concat($base,current-group()[1],'-',current-group()[last()])"
/>
</ip_address>
</xsl:for-each-group>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<Data>
<ip_address>192.100.200.323-327</ip_address>
</Data>
如果:
<ip_address action="del">192.100.200.326</ip_address>
从输入中删除,输出为:
<Data>
<ip_address>192.100.200.323-325</ip_address>
<ip_address>192.100.200.327</ip_address>
</Data>