gpt4 book ai didi

xslt - 有什么办法可以防止使用 xslt 显示不匹配的 xml 标签?

转载 作者:行者123 更新时间:2023-12-04 06:53:25 24 4
gpt4 key购买 nike

这是一个人为的 xml 文档示例。在我的真实案例中,xml 相当复杂,具有多个嵌套级别。

<alphabet>
<a>A</a>
<b>B</b>
<c>C</c>
... and so on
</alphabet>


使用 xslt,我想转换文档以便只打印元音。

在我的真实案例中,我们使用空模板匹配标签来阻止显示。但这对我来说太冗长了。

最佳答案

我不会允许“默认”或最低优先级/优先级匹配模板默默吞下元音或执行任何其他有意义的应用程序处理 .

一个很好的做法是,所有其他不匹配节点(给定类型)的模板应该产生一个好的调试消息,并且可以选择终止处理。

如果不遵循这种推荐的做法,那么相当多的错误将被悄悄地忽视,并且很难在任何给定的固定时间内找到它们并修复它们。

这是一个解决方案,它只涉及一个空模板 :

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

<my:vowels>
<c>A</c>
<c>E</c>
<c>I</c>
<c>O</c>
<c>U</c>
</my:vowels>

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

<xsl:template match="c[not(. = document('')/*/my:vowels/*)]"/>
</xsl:stylesheet>

当对以下 XML 文档 执行此转换时:
<alphabet>
<c>A</c>
<c>B</c>
<c>C</c>
<c>D</c>
<c>E</c>
<c>F</c>
<c>G</c>
<c>H</c>
<c>I</c>
<c>J</c>
<c>K</c>
<c>L</c>
<c>M</c>
<c>N</c>
<c>O</c>
<c>P</c>
<c>Q</c>
<c>R</c>
<c>S</c>
<c>T</c>
<c>U</c>
<c>V</c>
<c>W</c>
<c>X</c>
<c>Y</c>
<c>Z</c>
</alphabet>

产生了想要的结果 :
<alphabet>
<c>A</c>
<c>E</c>
<c>I</c>
<c>O</c>
<c>U</c>
</alphabet>

关于xslt - 有什么办法可以防止使用 xslt 显示不匹配的 xml 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2806675/

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