【问题标题】:C# method to check if character is markup or notC# 方法来检查字符是否是标记
【发布时间】:2011-04-04 07:40:04
【问题描述】:

.NET 框架中是否有任何方法可以在给定字符是 XML 标记字符时返回 true?也就是说,其中一个字符'"<>_&,以及可能存在的任何其他字符。

我知道我也可以进行简单的字符串搜索,但想知道是否存在不依赖手动输入字符的内置方法。

【问题讨论】:

  • 我不这么认为......但很想被证明是错误的! :-)

标签: c# .net xml


【解决方案1】:

您可以查看following KB article

【讨论】:

  • 感谢您的回复,但实际上我不想做任何替换。简单的格式函数,bool IsXMLEscape(char ch)。
【解决方案2】:

我不确定术语“XML 标记字符”(或者更确切地说是用于检测这些的与上下文无关的函数)是否有意义,因为您列出的某些字符仅具有特殊含义,具体取决于它们出现的上下文(例如'",如果它们出现在标签之外,则它们是普通字符)。

除此之外,您还可以编写自己的此类函数:

bool IsMarkupCharacter(char ch)
{
    switch (ch)
    {
        case '\'':
        case '\"':
        case '<':
        case '>':
        case '&':
            return true;

        default:
            return false;
    }
}

当然,您会希望根据 XML 规范检查它是否真正完整。 (顺便说一下,我没有将_ 从您的列表中包括在内;无论如何,它对 XML 来说并不特别,AFAIK。)

【讨论】:

  • 感谢您的回复。是的,你是对的,它实际上不是 XML 标记字符的一部分。所以这意味着,没有任何内置函数?
  • @Gunner,我想不是,因为确定这些字符的含义取决于上下文(正如我所说)。也就是说,要获得真正有用​​和正确的结果,您需要一种简单形式的 XML 解析器来处理字符流,而不仅仅是一个处理单个字符的函数。但是,如果我或 Stecya 的答案中显示的方法就足够了,那就使用它。
  • 是的,术语“XML 标记字符”根本没有明确定义。例如,在属性值中,如果使用双引号来分隔属性,则双引号是特殊字符,但如果使用撇号分隔属性,则撇号是特殊字符。在文本节点中,引号和撇号都不是特殊的。
【解决方案3】:

您也可以使用此代码

const string XMLCHARS = "'\"\\<>&";


if(XMLCHARS.Contains(c))
{
 --
}

【讨论】:

  • 这实际上是我现在使用的:)
【解决方案4】:

你可以使用扩展

public static class CharExtension
{
    public static bool IsXmlMarkup(this char charecter)
    {
        if(charecter == '\'' || charecter == '\"' || e.t.c) 
            return true;

        return false;
    }
}

然后就用

char c = '\'';
var res = c.IsXmlMarkup();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 2021-07-10
    • 1970-01-01
    • 2018-05-04
    相关资源
    最近更新 更多