XML过滤器元素



我只能选择xsl。这是我的xml文件(摘要):

<data>
<post>
<Status>publish</Status>
<Title>myTitle1</Title>
<Content>blabla</content>
</post>
<post>
<Status>publish</Status>
<Title>aaa</Title>
<Content>blabla</content>
</post>
<post>
<Status>draft</Status>
<Title>Title3</Title>
<Content>blabla</content>
</post>
</data>

这是我的排序xsl

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:template match="/data" >
<xsl:copy>
<xsl:for-each select="post" >
<xsl:sort select="translate(Title, 'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')" order="ascending" />
<xsl:copy-of select="." />
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

我想删除所有元素Status "draft"完整且有状态地"发布";只有status元素,然后按标题升序排序。

所以最终的xml应该是这样的:
<data>
<post>
<Title>aaa</Title>
<Content>blabla</content>
</post>
<post>
<Title>myTitle1</Title>
<Content>blabla</content>
</post>
</data>

谢谢马克

如何:

XSLT 1.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:template match="/data">
<xsl:copy>
<xsl:for-each select="post[not(Status='draft')]" >
<xsl:sort select="translate(Title, 'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
<xsl:copy>
<xsl:copy-of select="*[not(self::Staus)]"/>
</xsl:copy>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

相关内容

  • 没有找到相关文章