Xslt 删除节点和具有位置值的ID属性
我有一个XML文件:Xslt 删除节点和具有位置值的ID属性,xslt,xpath,xslt-1.0,Xslt,Xpath,Xslt 1.0,我有一个XML文件: <ROWS> <ROW type="x" id="1"> <Test>text</Test> </ROW> <ROW type="x" id="1"> <Test>text</Test> </ROW> <ROW type="y" id="2"> <Test>text</Test> </ROW> <ROW type=
<ROWS>
<ROW type="x" id="1">
<Test>text</Test>
</ROW>
<ROW type="x" id="1">
<Test>text</Test>
</ROW>
<ROW type="y" id="2">
<Test>text</Test>
</ROW>
<ROW type="x" id="3">
<Test>text</Test>
</ROW>
</ROWS>
文本
文本
文本
文本
我必须删除属性类型为“y”的行,属性id值应按递增顺序:
<ROWS>
<ROW type="x" id="1">
<Test>text</Test>
</ROW>
<ROW type="x" id="2">
<Test>text</Test>
</ROW>
<ROW type="x" id="3">
<Test>text</Test>
</ROW>
</ROWS>
文本
文本
文本
我尝试了以下XSLT:
<xsl:template match="ROWS/ROW[not(@type = 'y')]">
<xsl:variable name="RowID">
<xsl:number/>
</xsl:variable>
<ROW id="{$RowID}" type="{@type}">
<xsl:apply-templates/>
</ROW>
</xsl:template>
<xsl:template match="ROW[@type='y']"/>
但它不起作用,我也使用了优先级函数,但没有成功
有人能帮忙吗?最重要的部分是id值,即使删除了任何类型的行,它也应该是递增的,例如在本例中它是“y”。
我必须删除属性类型为“y”且属性id为的行
值应按增量顺序排列
我建议你这样做:
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/ROWS">
<xsl:copy>
<xsl:apply-templates select="ROW[not(@type='y')]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ROW">
<ROW type="{@type}" id="{position()}">
<xsl:copy-of select="node()"/>
</ROW>
</xsl:template>
</xsl:stylesheet>
我必须删除属性类型为“y”且属性id为的行
值应按增量顺序排列
我建议你这样做:
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/ROWS">
<xsl:copy>
<xsl:apply-templates select="ROW[not(@type='y')]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ROW">
<ROW type="{@type}" id="{position()}">
<xsl:copy-of select="node()"/>
</ROW>
</xsl:template>
</xsl:stylesheet>
我必须删除属性类型为“y”且属性id为的行
值应按增量顺序排列
我建议你这样做:
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/ROWS">
<xsl:copy>
<xsl:apply-templates select="ROW[not(@type='y')]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ROW">
<ROW type="{@type}" id="{position()}">
<xsl:copy-of select="node()"/>
</ROW>
</xsl:template>
</xsl:stylesheet>
我必须删除属性类型为“y”且属性id为的行
值应按增量顺序排列
我建议你这样做:
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/ROWS">
<xsl:copy>
<xsl:apply-templates select="ROW[not(@type='y')]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ROW">
<ROW type="{@type}" id="{position()}">
<xsl:copy-of select="node()"/>
</ROW>
</xsl:template>
</xsl:stylesheet>
您有几个问题,其中包括:•您的输出没有根元素;•这:@*[.!='id']
不选择任何内容,因为没有包含字符串id
的属性;此外,这是不必要的,因为您正在覆盖属性;•将每个实例计数到前面的节点是低效的;最好尽可能使用xsl:number或position()您的输出包含已删除行的文本值,这是由于应用了内置模板。@*[.!='id']-是的,我的错。应该使用name()position()/xsl:number-在本例中不是这样,因为模板是在所有行元素的上下文中调用的。类型为“y”的节点未被删除,id具有2、4、6、8等值。。。。有什么想法吗?嗨,现在成功了。我刚搬走了。感谢各位,这是一个巨大的帮助,非常感谢。您有几个问题,其中包括:•您的输出没有根元素;•这:@*[.!='id']
不选择任何内容,因为没有包含字符串id
的属性;此外,这是不必要的,因为您正在覆盖属性;•将每个实例计数到前面的节点是低效的;最好尽可能使用xsl:number或position()您的输出包含已删除行的文本值,这是由于应用了内置模板。@*[.!='id']-是的,我的错。应该使用name()position()/xsl:number-在本例中不是这样,因为模板是在所有行元素的上下文中调用的。类型为“y”的节点未被删除,id具有2、4、6、8等值。。。。有什么想法吗?嗨,现在成功了。我刚搬走了。感谢各位,这是一个巨大的帮助,非常感谢。您有几个问题,其中包括:•您的输出没有根元素;•这:@*[.!='id']
不选择任何内容,因为没有包含字符串id
的属性;此外,这是不必要的,因为您正在覆盖属性;•将每个实例计数到前面的节点是低效的;最好尽可能使用xsl:number或position()您的输出包含已删除行的文本值,这是由于应用了内置模板。@*[.!='id']-是的,我的错。应该使用name()position()/xsl:number-在本例中不是这样,因为模板是在所有行元素的上下文中调用的。类型为“y”的节点未被删除,id具有2、4、6、8等值。。。。有什么想法吗?嗨,现在成功了。我刚搬走了。感谢各位,这是一个巨大的帮助,非常感谢。您有几个问题,其中包括:•您的输出没有根元素;•这:@*[.!='id']
不选择任何内容,因为没有包含字符串id
的属性;此外,这是不必要的,因为您正在覆盖属性;•将每个实例计数到前面的节点是低效的;最好尽可能使用xsl:number或position()您的输出包含已删除行的文本值,这是由于应用了内置模板。@*[.!='id']-是的,我的错。应该使用name()position()/xsl:number-在本例中不是这样,因为模板是在所有行元素的上下文中调用的。类型为“y”的节点未被删除,id具有2、4、6、8等值。。。。有什么想法吗?嗨,现在成功了。我刚搬走了。谢谢大家,这是一个很大的帮助,非常感谢。你能解释一下为什么position()会在这个解决方案中返回正确的值,但是如果你在初始tem中使用position()的话就不会了吗