是否可以从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>