04-006 Configuration 之 XmlConfigurationSource
Posted on 2015-03-17 11:04 DotNet1010 阅读(161) 评论(0) 收藏 举报添加Key的部分代码:
case XmlNodeType.EndElement:
if (prefixStack.Any())
{
// If this EndElement node comes right after an Element node,
// it means there is no text/CDATA node in current element
if (preNodeType == XmlNodeType.Element)
{
var key = string.Join(Constants.KeyDelimiter, prefixStack.Reverse());
data[key] = string.Empty;
}
prefixStack.Pop();
}
break;
case XmlNodeType.CDATA:
case XmlNodeType.Text:
{
var key = string.Join(Constants.KeyDelimiter, prefixStack.Reverse());
if (data.ContainsKey(key))
{
throw new FormatException(Resources.FormatError_KeyIsDuplicated(key,
GetLineInfo(reader)));
}
data[key] = reader.Value;
break;
}
示例:
public void LoadKeyValuePairsFromValidXml()
{
var xml = @"
<settings>
<Data.Setting>
<DefaultConnection>
<Connection.String>Test.Connection.String</Connection.String>
<Provider>SqlClient</Provider>
</DefaultConnection>
<Inventory>
<ConnectionString>AnotherTestConnectionString</ConnectionString>
<Provider>MySql</Provider>
</Inventory>
</Data.Setting>
</settings>";
var xmlConfigSrc = new XmlConfigurationSource(ArbitraryFilePath);
xmlConfigSrc.Load(StringToStream(xml));
Assert.Equal(4, xmlConfigSrc.Data.Count);
Assert.Equal("Test.Connection.String", xmlConfigSrc.Data["DATA.SETTING:DEFAULTCONNECTION:CONNECTION.STRING"]);
Assert.Equal("SqlClient", xmlConfigSrc.Data["DATA.SETTING:DefaultConnection:Provider"]);
Assert.Equal("AnotherTestConnectionString", xmlConfigSrc.Data["data.setting:inventory:connectionstring"]);
Assert.Equal("MySql", xmlConfigSrc.Data["Data.setting:Inventory:Provider"]);
}
这里用的分隔符号是 :
浙公网安备 33010602011771号