XML 包含 javascript 的 VS Code 语法突出显示
VS Code syntax highlighting for XML containing javascript
编辑 - 解决方案:
我从@Tomalak 解决方案中获得了一些灵感。但是,我没有使用 XSLT,而是使用 VS Code 替换正则表达式来注释掉我的 XML 代码:
<!-- comment out xml tags : ^(\s*(\]\]>)?<\/?\w*>(<!\[CDATA\[)?)\s*$ -->
<!-- comment out xml tags : // -->
<!-- uncomment xml tags : ^\/\/(\s*(\]\]>)?<\/?\w*>(<!\[CDATA\[)?)\s*$ -->
<!-- uncomment xml tags : -->
使用</code> 将为您提供捕获组。我只是捕获所有 XML 标签并添加 <code>//
个字符以使其成为评论。
从那里我只是将文件的语法突出显示设置为 JavaScript 并且一切正常。
我只需要偶尔这样做一次,所以这个快速破解对我来说很合适。然而,更复杂的解决方案(如 XSLT 模板)可能更适合更活跃的项目。
问题
我有一个包含 javascript 的 XML 文件(由于我们使用的平台的限制。)我的代码如下所示:
<JS>
<MY_FUNCTION><![CDATA[
// comment here
let my_function = () => console.log("Hello World");
]]></MY_FUNCTION>
<LESS_THAN><![CDATA[
let less_than = (a,b) => a < b;
]]></LESS_THAN>
<GREATER_THAN><![CDATA[
let greater_than = (a,b) => a > b;
]]></GREATER_THAN>
</JS>
因为我的文件是 XML 我没有得到 javascript 的语法高亮显示。所以我的代码只是灰色的,类似于评论的样子。
是否有可以突出显示我的代码的扩展程序?如果对我有帮助,我也愿意修改突出显示规则。
你可以扭转这个问题。此 XSLT 模板将您的 XML 转换为 JS 代码
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" />
<xsl:template match="*[normalize-space(text()[1])]">
<xsl:value-of select="concat('//xml:<', name(), '><![CDATA[')" />
<xsl:apply-templates select="node() | *" />
<xsl:value-of select="concat('//xml:]]></', name(), '>')" />
</xsl:template>
<xsl:template match="*">
<xsl:value-of select="concat('//xml:<', name(), '>')" />
<xsl:apply-templates select="node() | *" />
<xsl:value-of select="concat('//xml:</', name(), '>')" />
</xsl:template>
</xsl:stylesheet>
产生这个:
//xml:<JS>
//xml:<MY_FUNCTION><![CDATA[
// comment here
let my_function = () => console.log("Hello World");
//xml:]]></MY_FUNCTION>
//xml:<LESS_THAN><![CDATA[
let less_than = (a,b) => a < b;
//xml:]]></LESS_THAN>
//xml:<GREATER_THAN><![CDATA[
let greater_than = (a,b) => a > b;
//xml:]]></GREATER_THAN>
//xml:</JS>
现在语法高亮可以根据 JS 规则工作。
严格来说 不需要使用 XSLT,您可能可以通过半途聪明的正则表达式替换来逃脱,例如 ^(\s*)(<|\]\]>)
替换为 //xml:
,假设 XML 标签总是在他们自己的行上。
您可以通过简单的搜索和替换操作删除 //xml:
将其全部转换回 XML,只要您完整保留 //xml:
注释即可。
这样做会让我们回到:
<JS>
<MY_FUNCTION><![CDATA[
// comment here
let my_function = () => console.log("Hello World");
]]></MY_FUNCTION>
<LESS_THAN><![CDATA[
let less_than = (a,b) => a < b;
]]></LESS_THAN>
<GREATER_THAN><![CDATA[
let greater_than = (a,b) => a > b;
]]></GREATER_THAN>
</JS>
编辑 - 解决方案:
我从@Tomalak 解决方案中获得了一些灵感。但是,我没有使用 XSLT,而是使用 VS Code 替换正则表达式来注释掉我的 XML 代码:
<!-- comment out xml tags : ^(\s*(\]\]>)?<\/?\w*>(<!\[CDATA\[)?)\s*$ -->
<!-- comment out xml tags : // -->
<!-- uncomment xml tags : ^\/\/(\s*(\]\]>)?<\/?\w*>(<!\[CDATA\[)?)\s*$ -->
<!-- uncomment xml tags : -->
使用</code> 将为您提供捕获组。我只是捕获所有 XML 标签并添加 <code>//
个字符以使其成为评论。
从那里我只是将文件的语法突出显示设置为 JavaScript 并且一切正常。
我只需要偶尔这样做一次,所以这个快速破解对我来说很合适。然而,更复杂的解决方案(如 XSLT 模板)可能更适合更活跃的项目。
问题
我有一个包含 javascript 的 XML 文件(由于我们使用的平台的限制。)我的代码如下所示:
<JS>
<MY_FUNCTION><![CDATA[
// comment here
let my_function = () => console.log("Hello World");
]]></MY_FUNCTION>
<LESS_THAN><![CDATA[
let less_than = (a,b) => a < b;
]]></LESS_THAN>
<GREATER_THAN><![CDATA[
let greater_than = (a,b) => a > b;
]]></GREATER_THAN>
</JS>
因为我的文件是 XML 我没有得到 javascript 的语法高亮显示。所以我的代码只是灰色的,类似于评论的样子。
是否有可以突出显示我的代码的扩展程序?如果对我有帮助,我也愿意修改突出显示规则。
你可以扭转这个问题。此 XSLT 模板将您的 XML 转换为 JS 代码
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" />
<xsl:template match="*[normalize-space(text()[1])]">
<xsl:value-of select="concat('//xml:<', name(), '><![CDATA[')" />
<xsl:apply-templates select="node() | *" />
<xsl:value-of select="concat('//xml:]]></', name(), '>')" />
</xsl:template>
<xsl:template match="*">
<xsl:value-of select="concat('//xml:<', name(), '>')" />
<xsl:apply-templates select="node() | *" />
<xsl:value-of select="concat('//xml:</', name(), '>')" />
</xsl:template>
</xsl:stylesheet>
产生这个:
//xml:<JS>
//xml:<MY_FUNCTION><![CDATA[
// comment here
let my_function = () => console.log("Hello World");
//xml:]]></MY_FUNCTION>
//xml:<LESS_THAN><![CDATA[
let less_than = (a,b) => a < b;
//xml:]]></LESS_THAN>
//xml:<GREATER_THAN><![CDATA[
let greater_than = (a,b) => a > b;
//xml:]]></GREATER_THAN>
//xml:</JS>
现在语法高亮可以根据 JS 规则工作。
严格来说 不需要使用 XSLT,您可能可以通过半途聪明的正则表达式替换来逃脱,例如 ^(\s*)(<|\]\]>)
替换为 //xml:
,假设 XML 标签总是在他们自己的行上。
您可以通过简单的搜索和替换操作删除 //xml:
将其全部转换回 XML,只要您完整保留 //xml:
注释即可。
这样做会让我们回到:
<JS>
<MY_FUNCTION><![CDATA[
// comment here
let my_function = () => console.log("Hello World");
]]></MY_FUNCTION>
<LESS_THAN><![CDATA[
let less_than = (a,b) => a < b;
]]></LESS_THAN>
<GREATER_THAN><![CDATA[
let greater_than = (a,b) => a > b;
]]></GREATER_THAN>
</JS>