gpt4 book ai didi

xml - 从 XSLT 中删除属性并处理结果集

转载 作者:数据小太阳 更新时间:2023-10-29 02:11:26 26 4
gpt4 key购买 nike

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

是的,只需搜索“multi-pass transformation”,您会找到很多答案以及很好的代码示例。

但是,对于您想执行的操作,这种转换链接过于复杂且完全没有必要

只需使用:

<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 - 从 XSLT 中删除属性并处理结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6528783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com