gpt4 book ai didi

xml - 如何保留 xml 文档中的所有标记、结构和文本,仅用 XSLT 替换部分标记、结构和文本?

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

我一直在尝试将简单的 xsl 样式应用于 xml 文档:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>

<xsl:for-each select="//title">
<h1><xsl:value-of select="."/></h1>
</xsl:for-each>

</body>
</html>
</xsl:template>

</xsl:stylesheet>

不幸的是,这似乎只是简单地忽略了所有其他标签并将它们及其内容从输出中删除,而我只剩下转换为 h1s 的标题。我希望能够做的是保留我的文档的结构,同时只替换它的一些标签。

例如,如果我有这份文件:

<section>
<title>Hello world</title>
<p>Hello!</p>
</section>

我可以得到这个:

<section>
<h1>Hello world</h1>
<p>Hello!</p>
</section>

不太确定从 XSLT 手册的何处开始查找。

最佳答案

正如 O. R. Mapper 所说,解决这个问题的方法是为您的转换添加一个标识模板,然后只覆盖您需要的部分。这将是完整的解决方案:

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

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

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

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

在您的样本输入上运行时,会产生:

<html>
<body>
<section>
<h1>Hello world</h1>
<p>Hello!</p>
</section>
</body>
</html>

如果您真的只想保留原始 XML 但替换 <title> , 你可以只删除中间的 <xsl:template>你应该得到结果:

<section>
<h1>Hello world</h1>
<p>Hello!</p>
</section>

关于xml - 如何保留 xml 文档中的所有标记、结构和文本,仅用 XSLT 替换部分标记、结构和文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14662409/

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