如何从SMO解析这个类似路径的字符串?

Den*_*nis 5 c#

我想知道,有没有任何标准的方法来解析这样的路径类似的字符串:

Server[@Name='MyServerName']/Database[@Name='MyDatabaseName']/Table[@Name='MyTableName' and @Schema='MySchemaName']
Run Code Online (Sandbox Code Playgroud)

结果必须是:

  • ItemName(服务器)
    • PropertyName(Name),PropertyValue(MyServerName)
  • ItemName(数据库)
    • PropertyName(Name),PropertyValue(MyDatabaseName)
  • ItemName(表)
    • PropertyName(Name),PropertyValue(MyTableName)
    • PropertyName(Schema),PropertyValue(MySchemaName)

这里最明显的是做一个正则表达式(当然,String.Split),但可能有一个更好的,标准的方式?

有关信息:字符串来自SMO Urn.Value.

UPDATE.

找到答案,见下文.

Den*_*nis 5

好吧,我做到了.:)

答案很简单.有Urn.XPathExpression属性.但它的返回值类型是Microsoft.SqlServer.Management.Sdk.Sfc.XPathExpression,而不是System.Xml.XPath.XPathExpression(这让我很困惑).

并且XPathExpression从SMO中可以解析自己的所有必要功能:

        var urn = new Urn("Server[@Name='MyServerName']/Database[@Name='MyDatabaseName']/Table[@Name='MyTableName' and @Schema='MySchemaName']");

        for (var i = 0; i < urn.XPathExpression.Length; i++)
        {
            Console.WriteLine("ItemName ({0})", urn.XPathExpression[i].Name);

            foreach (DictionaryEntry item in urn.XPathExpression[i].FixedProperties)
            {
                Console.WriteLine("\tPropertyName ({0}), PropertyValue ({1})", item.Key, item.Value);
            }
        }
Run Code Online (Sandbox Code Playgroud)

产生这个输出:

ItemName (Server)
        PropertyName (Name), PropertyValue ('MyServerName')
ItemName (Database)
        PropertyName (Name), PropertyValue ('MyDatabaseName')
ItemName (Table)
        PropertyName (Name), PropertyValue ('MyTableName')
        PropertyName (Schema), PropertyValue ('MySchemaName')
Run Code Online (Sandbox Code Playgroud)

Christian.K,感谢XPath的暗示!