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

前端之家收集整理的这篇文章主要介绍了xml – 从XSLT中删除属性并使用结果集前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以从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>

猜你在找的XML相关文章