gpt4 book ai didi

xml - 使用 XSLT 将 XML 标记转换为任意位置的属性

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

我们有一个 XML 格式,它实际上只是带有一些额外 gubbins 的 HTML。它定义了哪些 HTML 元素是可编辑的,以及哪些属性是可编辑的。

举个例子

<img src="images/placeholder.jpg" 
alt="Placeholder"
width="600"
height="250"
border="0">
<var attr="src" />
<var attr="height" ok="150-300" />
</img>

XML 使模板更易于编写,但我需要将其转换为有效的 HTML。为此,我想将其折叠成:

<img src="images/placeholder.jpg" 
alt="Placeholder"
width="600"
height="250"
border="0"
editable="src height"
constraints="height:150-300">

我可以为 <img> 做这个,但问题是 <var>标签实际上可以作为页面中任何元素的子元素出现。在所有情况下,将其转换为属性的算法都是相同的,但我不知道该怎么做是指定一个可以匹配 <var> 的父元素的 XSLT 模板。标签。我试过 match="var/.."但事实证明这是无效的。

另一种方法是匹配 <var> s 并将它们作为属性添加到它们的父级,但我相信在处理的这一点上,特定的船已经起航了。

这可行吗?

谢谢

回答!

我将更完整的答案与 Dimitre 有用的准确答案结合起来形成以下内容:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="*[var]">
<xsl:copy >
<xsl:attribute name="editable">
<xsl:for-each select="var[@attr]">
<xsl:value-of
select="concat(@attr,
substring(' ',
1 div (position()!=last())))"/>
</xsl:for-each>
</xsl:attribute>
<xsl:attribute name="constraints">
<xsl:for-each select="var[@ok]">
<xsl:value-of
select="concat(@attr,':',@ok,
substring(';',
1 div (position()!=last())))"/>
</xsl:for-each>
</xsl:attribute>
<xsl:apply-templates select="@*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="var">
</xsl:template>

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

不幸的是,Alejandro 给出的确切答案并没有立即起作用(仍然不确定为什么),但他的答案和 Dmitri 的答案的组合似乎很好地完成了工作:)

最佳答案

what I can't work out how to do is specify an XSLT template that can match the parent element of a <var> tag

使用:

<xsl:template match="*[var]">

关于xml - 使用 XSLT 将 XML 标记转换为任意位置的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4463773/

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