[XSLT难题 No.3]如何得到某个属性所在的元素

CrazyJavar 2003-08-21 09:49:25
现有个xslt如下,获得XML文档中所有属性abc的值,现在想修改一下,以使得查到属性为abc时,把该属性所在的元素列出来
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes" media-type="text/xml" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="node()"/>
</xsl:template>
<xsl:template match="node()">
<xsl:for-each select="@*">
<xsl:if test="name()='abc'">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
<xsl:apply-templates select="node()"/>
</xsl:template>
</xsl:stylesheet>

源xml如下:
<root>
<A abcpk="123">
<B defpk="456"/>
<C ghipkjk="789"/>
<D pklmn="101112"/>
<E abc="123"/>
</A>
</root>

原来经过xsl后的显示如下
123

现在我希望显示如下,也就是把abc属性所在的元素的名称显示出来:
E

但是我没有找到类似parent()之类的函数

请高手指点一下,谢谢
...全文
38 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
saucer 2003-08-21
  • 打赏
  • 举报
回复
a simpler solution:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select="//@*[name()='abc']" />
</xsl:template>

<xsl:template match="@*">
<xsl:value-of select="name(..)" />
</xsl:template>
</xsl:stylesheet>
saucer 2003-08-21
  • 打赏
  • 举报
回复
a simpler solution:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select="//@*[name()='abc']" />
</xsl:template>

<xsl:template match="@*">
<xsl:value-of select="name(..)" />
</xsl:template>
</xsl:stylesheet>
ssm1226 2003-08-21
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes" media-type="text/xml" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="node()"/>
</xsl:template>
<xsl:template match="node()">
<xsl:for-each select="@*">
<xsl:if test="name()='abc'">
<xsl:value-of select="local-name(parent::*)"/>
</xsl:if>
</xsl:for-each>
<xsl:apply-templates select="node()"/>
</xsl:template>
</xsl:stylesheet>

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧