【发布时间】:2016-08-26 09:47:37
【问题描述】:
我有以下 XML 输入:
<table>
<tbody>
<tr>
<td style="width: 10px; margin-left: 10px;">td text</td>
<td style="color: red; width: 25px; text-align: center; margin-left: 10px;">
<span>span text</span>
</td>
</tr>
</tbody>
</table>
请注意,我在同一个文档中有其他节点不应该被触及。
我想从元素中删除某些属性值(在本例中是从 td)。 假设我想删除样式属性中的宽度值。 我不知道在样式属性中设置宽度值的位置,它可能在任何地方。 td 中的跨度并不重要(输入中包含此元素和其他一些元素)。
我希望输出是这样的:
<table>
<tbody>
<tr>
<td style="margin-left: 10px;">td text</td>
<td style="color: red; text-align: center; margin-left: 10px;">
<span>span text</span>
</td>
</tr>
</tbody>
</table>
我更喜欢使用 XSLT1,我还没有使用 replace() 函数(但也许我做错了什么)。
我尝试使用此 XSLT:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="td/@style">
<xsl:attribute name="style">
<xsl:value-of select="replace(., 'width:.[[:digit:]]+px;', '')" />
</xsl:attribute>
<xsl:apply-templates select="node()" />
</xsl:template>
我仍然是 XSLT 的初学者,上面的这个不起作用,我在这里没有找到解决方案。 另外,我不知道宽度值,所以我需要用正则表达式替换该值(我使用了“width:.[[:digit:]]+px;”)或其他东西。 是否有更简单的方法可以替换每个特定值?所以我也可以删除 text-align 而不必考虑新的正则表达式?
我真的希望你能帮助我解决这个(当然很容易)的问题。 提前谢谢!
【问题讨论】:
-
replace是 XSLT/XPath 2.0,所以我不确定你为什么说“我更喜欢使用 XSLT1”。至于一般解决方案,我认为您需要先实现 CSS 解析器或转换来处理 CSS 样式属性值。所以我认为这不是一个容易解决的问题,例如 CSSwidth值不限于px单元。 -
"上面的这个不起作用" 这是一个无用的描述。您应该报告确切的结果并逐字复制收到的任何错误消息。