我有这样的事情:
<root>
<elementA></elementA>
<elementB></elementB>
<elementC>Some Data 1</elementC>
<elementC>Some Data 2</elementC>
<elementC>Some Data 3</elementC>
<elementD></elementD>
<elementC>Other Data 1</elementC>
<elementC>Other Data 2</elementC>
<elementC>Other Data 3</elementC>
</root>
我需要这样的东西:
<root>
<elementA></elementA>
<elementB></elementB>
<wraper_for_C>
<elementC>Some Data 1</elementC>
<elementC>Some Data 2</elementC>
<elementC>Some Data 3</elementC>
<wrapper_for_C>
<elementD></elementD>
<wraper_for_C>
<elementC>Other Data 1</elementC>
<elementC>Other Data 2</elementC>
<elementC>Other Data 3</elementC>
<wrapper_for_C>
</root>
有人知道如何围绕一个具有相同名称的元素块获取包装吗?
答案 0 :(得分:0)
xslt 1.0
void RepositoryItemRemoved(int i)
{
beginRemoveRows(QModelIndex(), i, i);
removeModelItem(i);
endRemoveRows();
}
P.S。我错了,我认为这都是关于C元素的:)
答案 1 :(得分:0)
如果您可以使用XSLT 2.0,则可以使用group-adjacent
属性xsl:for-each-group来对相邻元素进行分组。
试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="root">
<xsl:copy>
<xsl:for-each-group select="*" group-adjacent="name()">
<xsl:choose>
<xsl:when test="count(current-group()) > 1">
<xsl:element name="Wrapper_{name()}">
<xsl:apply-templates select="current-group()" />
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()" />
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
请注意使用Attribute Value Templates根据分组的元素名称动态创建包装元素名称。