gpt4 book ai didi

xslt - 从随机 HTML 元素中删除 xmlns 属性

转载 作者:行者123 更新时间:2023-12-01 19:39:03 24 4
gpt4 key购买 nike

我花了很长时间才解决我遇到的 XSL 问题。

基本上,我有一个匹配的模板,它调用另一个 XSL 文件中的命名模板。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:include href="/_internal/stylesheets/core/common" />

<xsl:template match="system-page">

<div id="main">
<div class="pageHeading">
<h1><system-page-display-name />&#160;</h1>
<xsl:if test="current()/dynamic-metadata[name='Printable']/value='true' or current()/dynamic-metadata[name='Shareable']/value='true'">
<xsl:call-template name="shareAndPrint">
<xsl:with-param name="shareable" select="current()/dynamic-metadata[name='Shareable']/value" />
<xsl:with-param name="printable" select="current()/dynamic-metadata[name='Printable']/value" />
</xsl:call-template>
</xsl:if>
</div>
<xsl:copy-of select="current()//system-data-structure/html/node()"/>
</div>


</xsl:template>

然后,在另一个文件中,这是我调用的模板:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:spring="http://www.springframework.org/tags" version="1.0">

<xsl:template name="shareAndPrint">

<xsl:param name="shareable"/>
<xsl:param name="printable"/>

<div class="shareBar">
<xsl:if test="$printable = 'true'">
<a class="print" href="javascript:window.print();"><spring:message code="print.label" /></a>
</xsl:if>
<xsl:if test="$shareable = 'true'">
<span class="st_sharethis" id="shareThis"></span>
</xsl:if>
</div>

<xsl:if test="$shareable = 'true'">
<script type="text/javascript">$('#shareThis').attr('displayText','ShareThis');</script>
<script src="http://w.sharethis.com/button/buttons.js" type="text/javascript"></script>
</xsl:if>

</xsl:template>

如您所见,我基本上使用 XSL 生成一个 JSP 文件,其中包含 spring:message 标记,用于翻译我们的网站。

我的问题基本上是,无论我做什么,XML 输出最终总是会包含带有 xmlns:spring="http://www.springframework.org/tags"的 HTML 元素。我看过很多与此类问题相关的其他帖子,但似乎没有一个解决方案适合我。

这是一些示例输出:

<div id="main">
<div class="pageHeading"><h1>CR-HTML-Static-WRS-en - test&#160;</h1>
<div class="shareBar" xmlns:spring="http://www.springframework.org/tags">
<a class="print" href="javascript:window.print();">
<spring:message code="print.label" />
</a>
<span class="st_sharethis" id="shareThis" ></span>
</div>
<script type="text/javascript" xmlns:spring="http://www.springframework.org/tags">$('#shareThis').attr('displayText','ShareThis');</script>
<script src="http://w.sharethis.com/button/buttons.js" type="text/javascript" xmlns:spring="http://www.springframework.org/tags" ></script>
</div>TEST CR</div>

我尝试在 xsl:stylesheet 标记上添加排除结果前缀,虽然这会从 HTML 元素中删除 xmlns,但它会被添加到 spring:message 标记中,这在 JSP 时不起作用被解析(xmlns 是 spring:message 的无效属性)。所以我不确定我做错了什么或者我还可以尝试什么。

拜托,如果有人对此有任何想法或解决方案,我将不胜感激。抱歉,如果我遗漏了任何内容,如果需要,我会添加它。

提前致谢。

最佳答案

您希望结果包含 namespace 前缀,但不包含这些前缀的 namespace 声明。这对于 xslt 来说是不可能的,因为这样的 xml 输出格式不正确 - 因此您需要对这些文件进行后处理,如下所示:

sed -i 's# xmlns:spring="[^"]*"##g' output.html

注意:理论上有一个选项 disable output escaping - 但它太丑陋了,并且使你的 xslt 很快就无法维护。我不推荐这样做。

关于xslt - 从随机 HTML 元素中删除 xmlns 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13259362/

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