怎么判斷是不是XML語句呢?
比如:<SCHEDULE_FILE><SCH_FILE>XXXXXXXXXX</SCH_FILE><SCH_STATUS>XXXXX</SCH_STATUS></SCHEDULE_FILE>
比如:<SCHEDULE_FILE><SCH_FILE>XXXXXXXXXX</SCH_FILE><SCH_STATUS>XXXXX</SCH_STATUS></SCHEDULE_FILE>
string s="<SCHEDULE_FILE> <SCH_FILE>XXXXXXXXXX </SCH_FILE> <SCH_STATUS>XXXXX </SCH_STATUS> </SCHEDULE_FILE>";
xmlDoc=new XmlDocument();
try
{
xmlDoc.LoadXml(s);
}
catch
{
//不符合
}
正则表达式是好东西,但他不是万能的
正则表达式是用来操作字符串的,处理字符串相关的
不是用来判断类型的
xml格式的程序涉及到一个递归判断的功能(xml里面有n层),正则好像不能实现这个功能
XML 架构正则表达式与 pattern 方面一起使用,提供对符合定义的模式的字符串的约束或限制。pattern 方面是对数据类型的值空间的约束,这是通过将词法空间约束为匹配特定模式的文本实现的。pattern 的值必须是正则表达式。Pattern 用于将值空间约束为由匹配特定正则表达式的文本表示的值。 示例
以下示例定义一个用户导出的数据类型,该数据类型创建美国邮政编码的表示形式,该表示形式被限制为与特定正则表达式匹配的字符串。 输入文件:T.xml
Xml 复制代码
<zips xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="t.xsd">
<zip>12345</zip>
<zip>12345-1234</zip>
</zips>
XML 架构:T.xsd
Xml 复制代码
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<xs:element name="zips">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element name="zip" type="better-us-zipcode"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="better-us-zipcode">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{5}(-[0-9]{4})?"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
正则表达式中使用以下两种类型的字符:元字符和常规字符。元字符为下列字符之一:.、\、?、*、+、{、}、(、)、[ 或 ]。这些字符在正则表达式中具有特殊含义,但这些字符可从表示只包含其自身的字符串集的原子转义。转义的元字符具有常规字符的行为。常规字符为不是元字符的任何 XML 字符。在正则表达式中,一个常规字符是一个原子,它表示只包含其自身的单字符串集。以下主题描述 XML 架构正则表达式。 http://msdn.microsoft.com/zh-cn/library/ms256481(VS.80).aspx
string result = "<SCHEDULE_FILE> <SCH_FILE>XXXXXXXXXX </SCH_FILE> <SCH_STATUS>XXXXX </SCH_STATUS> </SCHEDULE_FILE>";
bool blResult = Regex.IsMatch(result, @"^\s*<SCHEDULE_FILE[^>]*>[^<>]*(((?'tag' <\w+[^>]*>)[^<>]*)+((?'-tag' </\w+>)[^<>]*)+)*(?(tag)(?!))</SCHEDULE_FILE>\s*$", RegexOptions.IgnoreCase);
string s="<SCHEDULE_FILE> <SCH_FILE>XXXXXXXXXX </SCH_FILE> <SCH_STATUS>XXXXX </SCH_STATUS> </SCHEDULE_FILE>";
xmlDoc=new XmlDocument();
try
{
xmlDoc.LoadXml(s);
}
catch
{
//不符合
}
如果只是这个需求的话,没必要用正则,只要用if判断一下就可以了
if (yourStr.StartsWith("<"))这个需求可以用平衡组+循环来做但既然是XML的东东,最好是用XML的方法来做,除非你是想对不闭合的标签进行闭合操作