【问题标题】:Can I escape XML characters like brackets that are contained within XML literal syntax of VB.NET?我可以转义 VB.NET 的 XML 文字语法中包含的括号等 XML 字符吗?
【发布时间】:2012-09-21 16:12:18
【问题描述】:

不久前,我问了这个问题:

Does VB.NET have a multi-line string declaration syntax equivalent to c#?

在这里,我了解了 VB.NET 中的 XML 文字。使用这种语法,我能够使用 @ 符号模拟 c# 中可用的多行字符串语法。然而,我遇到了一个障碍。似乎将<> 放在文本中并不能很好地放在Visual Studio 的肚子里。以这段代码为例:

Dim Sql As String = <a><![CDATA[]]>
                        <text instead pointy brackets fails>
                    </a>.Value

我可以以某种方式逃避这些括号或告诉文字不要关心它吗?

【问题讨论】:

    标签: xml vb.net literals xelement


    【解决方案1】:

    XML 文字仅适用于 XML 数据。您可以使用&amp;lt; 转义左尖括号,但除非您真正想要XML 数据,否则我建议您根本不要使用XML 文字。

    【讨论】:

    • 感谢您的回答,但绝对不是我想听到的=\。由于使用 XML 文字的全部目的是使用 @ 模拟 c# 的多行字符串语法,因此将所有 &amp;lt; 替换为 &amp;lt; 会破坏方便的目的。我最终使用了一个资源文件,它最终可以满足我的需求。
    • 这可能是您使用 XML 文字的重点——但它强调不是该功能的目的。听起来把它放在资源文件中是正确的方法,真的。
    【解决方案2】:

    您需要将文本放在 CDATA 部分中:

    Dim Sql As String = <a><![CDATA[
    <text instead pointy brackets fails>
    ]]></a>.Value
    
    Console.WriteLine("===")
    Console.WriteLine(Sql)
    Console.WriteLine("===")
    

    应该输出:

    ===
    
    <text instead pointy brackets fails>
    
    ===
    

    请注意,CDATA 还将保留文本中的前导空格;这就是为什么我将它们从括号中的文本中删除。

    【讨论】:

    • @oscilatingcretin:IMO 仍然不合适。如果您不尝试创建 XML,则不应使用 XML 文字。
    • @JonSkeet,我的意图,无论是否合适,在我的问题中都非常清楚。如果您发现我的“编码技巧”不合适,那么您不应该通过发布您自己的解决方案作为答案来助长我对 .NET 框架的公然滥用。虽然资源文件可能是最佳实践方法,但这种方法为您提供了 C# 风格的多行字符串构造,当我在 VB.NET 中编码时,我真的很怀念它。除非有人能提出一个客观的理由来说明这种 hack 方法为什么不好(性能等),否则我使用它没有问题。
    • @oscilatingcretin:一方面,如果你的多行文本需要包含“]]>”,它就会失败。我自己的回答特别建议你停止这样做,所以我不明白你怎么能建议它“促成”了你对 VB 的公然滥用。但是,嘿,如果你想继续故意滥用某些东西,显然我无法阻止你。至少你现在完全意识到自己在滥用这个。
    猜你喜欢
    • 2020-05-13
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    相关资源
    最近更新 更多