gpt4 book ai didi

XSLT:更改节点内部文本

转载 作者:行者123 更新时间:2023-12-04 05:59:32 26 4
gpt4 key购买 nike

我需要转换以下xml文档:

<a>
<b/>
<c/>
myText
</a>

到这个:
<a>
<b/>
<c/>
differentText
</a>

所以,我写了这个XSLT文档
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" omit-xml-declaration="no" />

<xsl:template match="/a/text()">
<a>
<b/>
<c/>
differentText
</a>
</xsl:template>
</xsl:stylesheet>

这样,我得到以下结果:
<?xml version="1.0" encoding="utf-8"?>
<a>
<b /><c />
differentText
</a>
<a>
<b /><c />
differentText
</a>
<a>
<b /><c />
differentText
</a>

由于进行了3场比赛,因此结果重复出现3次。为什么?我可以解决吗?谢谢

最佳答案

排除仅whtespace文本节点。知道并使用 <xsl:strip-space> 指令

此转换:

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

<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="a/text()">
<xsl:text>Diferent text</xsl:text>
</xsl:template>
</xsl:stylesheet>

应用于提供的XML文档时,会生成所需的正确结果

不需要特定模板的match表达式中的复杂谓词!

我们应该努力利用该语言的全部功能来实现最简单,最短,最优雅,最易读,最易理解的解决方案。

这样的解决方案很可能会被任何XSLT处理器最了解,最容易实现并且最有可能被优化,从而实现最有效的实现。

关于XSLT:更改节点内部文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2888880/

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