有没有办法使用ASP向所有html标签添加名称空间?

时间:2011-06-01 09:55:42

标签: javascript regex asp-classic

有没有办法使用ASP函数/ RegExp / javascript将名称空间xmlns="http://www.w3.org/1999/xhtml"添加到所有html标签? (这类似于向html标签添加属性)

例如:

以下是textarea的主体:

<p>Welcome to the StackOverFlow site.</p>
<p xmlns="http://www.w3.org/1999/xhtml">Please <a href="http://stackoverflow.com">click here</a> for more info.</p>

正文包含两个html标记,<p>&amp; <a>

此处有一个<p>代码已包含名称空间xmlns="http://www.w3.org/1999/xhtml"

现在我需要将命名空间添加到其他标签。

我在ASP页面上尝试了很多解决方法,但没有运气。

请帮我解决这个问题。

3 个答案:

答案 0 :(得分:1)

这在jQuery中非常简单:

对于页面上的所有元素:

$("*").attr("xmlns", "http://www.w3.org/1999/xhtml");

对于textarea中的一些代码的所有元素(例如,id为'MyTextArea'):

$($("#MyTextArea").text()).attr("xmlns", "http://www.w3.org/1999/xhtml");

答案 1 :(得分:1)

以下是仅使用JavaScript regex的解决方案:

result = subject.replace(
    /(<\w+)((?:\s+(?!xmlns\b)\w+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+))*\s*\/?>)/g,
    '$1 xmlns="http://www.w3.org/1999/xhtml"$2'
);

正则表达式匹配任何看似开头标记(<abc>)或自闭标记(<xyz />)的内容。标记可以包含任意数量的属性,除非其中一个属性名为“xmlns”。属性值可以是双引号,单引号或不引用。如果匹配标记,则会在标记名称后立即添加“xmlns”属性。

请注意,此解决方案无法处理很多内容,例如“无价值”属性(例如nowrap),或使用命名空间限定的标记或属性名称(例如<abc:xyz>)。正则表达式在HTML上确实不能很好地工作(这是一种耻辱,因为这是大多数人似乎想要使用它们的原因)。任何regex-vs-HTML解决方案都必须从简化假设的详尽列表开始,例如“no <script> tags”或“不要担心CDATA部分或SGML注释”。

答案 2 :(得分:0)

基于Alan的输入,我在ASP

上构建了我的解决方案
Function ReplaceAllByExpression(str)
    Dim objRegExp, sHtml
    sHtml = str
    Set objRegExp = New RegExp

    objRegExp.IgnoreCase = True
    objRegExp.Global = True
    objRegExp.MultiLine = True

    objRegExp.Pattern = "(<(?!tr|td|thead|tbody)\w+)((?:\s+(?!xmlns\b)\w+\s*=\s*(?:""[^""]*""|'[^']*'|[^\s>]+))*\s*\/?>)"

    sHtml = objRegExp.Replace(sHtml, "$1 xmlns=""http://www.w3.org/1999/xhtml""$2")

    ReplaceAllByExpression = sHtml

End Function