加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – 从XSLT中删除属性并使用结果集

发布时间:2020-12-16 07:51:48 所属栏目:百科 来源:网络整理
导读:是否可以从XSLT中删除xml属性并使用生成的转换? 换句话说,我有以下XML: ?xml version="1.0" encoding="iso-8859-1"??xml-stylesheet type="text/xsl" href="XML_TEST.xslt"?report xmlns="abc123"bookpage id="22"/pagepage id="23"/page/book/report 我知
是否可以从XSLT中删除xml属性并使用生成的转换?

换句话说,我有以下XML:

<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="XML_TEST.xslt"?>
<report xmlns="abc123">
<book>
<page id="22">

</page>
<page id="23">

</page>
</book>
</report>

我知道我可以使用以下XSLT来剥离属性:

<xsl:template match ="@*" >
            <xsl:attribute name ="{local-name()}" >
                <xsl:value-of select ="." />
            </xsl:attribute>
            <xsl:apply-templates/>
        </xsl:template>
        <xsl:template match ="*" >
            <xsl:element name ="{local-name()}" >
                <xsl:apply-templates select ="@* | node()" />
            </xsl:element>
  </xsl:template>

但如果我想读取值,请使用以下模板

<xsl:template match="report">
    <xsl:for-each select="book/page">
        <xsl:value-of select="@id"/>
    </xsl:for-each>
</xsl:template>

我可以将该模板链接到前两个的输出吗?

提前致谢,

-R.

Is it possible to remove xml
attributes from XSLT AND work with the
resulting transform?

是的,只需搜索“多遍转换”,您就会找到很多具有良好代码示例的答案.

但是,对于您想要做的事情,这种转换链接过于复杂且完全没有必要.

只需使用:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:x="abc123" >
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="x:page">
  <xsl:value-of select="@id"/>
 </xsl:template>
</xsl:stylesheet>

如果事先不知道XML文档的默认命名空间,您仍然可以在一次传递中生成所需的结果:

<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="*[name()='page']">
  <xsl:value-of select="@id"/>
 </xsl:template>
</xsl:stylesheet>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读