XML配置中的变量
本文关键字:变量 配置 XML | 更新日期: 2023-09-27 18:16:56
我正在尝试在我的项目中使用xml配置文件。现在看起来像:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="replication" type="Project.Replication.ReplicationConfigSection, Project.Replication" />
<section name="processing" type="Project.Processing.ProcessingConfigSection, Project.Processing" />
</configSections>
<replication>
<streams>
<stream name="STREAM_DATA_14360" />
</streams>
</replication>
<processing dataStream="STREAM_DATA_14360" />
</configuration>
它工作正常,但我对其中的重复项("STREAM_DATA_14360"
(感到困惑。
你能提醒我,如何用XML或其他东西创建变量,以便在应用程序配置中可以接受数据重用吗?
更新:
在现实生活中,我的配置有更多的部分。有一个值出现在许多部分中:STREAM_DATA_14360
。所以我希望能够只在配置文件的一个地方更改这个值,而在其他地方使用对它的引用
改变配置的速度-是第一个原因。
文件的大小是一秒,因为值可能很大:STREAM_INFO_FUTURE_SESSION_CONTENTS_12421
(即第三方名称(
您可以简单地在<appSettings>
中添加此值,然后按您所说的访问它。
你可以这样做如下:
<appSettings>
<add key="StreamName" value="STREAM_DATA_14360"/>
</appSettings>
在代码中,您可以按如下方式访问它:
string streamName = ConfigurationManager.AppSettings["StreamName"];
在使用System.Configuration
程序集之前,请确保添加对该程序集的引用。
XML没有任何本机扩展宏或模板-任何场景都需要执行预处理步骤或使用读取配置的代码来替换值。
不过,如果这些名字没有经过编辑,那么简单的搜索/替换似乎可以解决问题,而不必担心误报。
您可以将T4模板组合在一起作为预处理器,这是否值得取决于您期望修改此文件的频率。
还应该可以将web.config转换引擎硬塞进进行替换,但根据配置文件的设置方式,您可能需要为XDT引擎编写一些托管代码。
除了使用可能(或可能不会(方便您生活的外部代码外,您还可以定义自己的从ConfigurationSection
继承的类,其中定义和封装键/值对并使用ConfigurationProperty
属性。
看看http://msdn.microsoft.com/en-us/library/2tw134k3.aspx有关如何:使用ConfigurationSection创建自定义配置节的更多信息。
EDIT:您可以在xsd中进行引用(请在此处查看(
感谢您的回答。我同意Mark的观点,XML中不支持变量或引用。但是,在我的情况下,有一个更简单的解决方案。我现在觉得自己很愚蠢,但希望这也能帮助另一个慢性子。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="global" type="Project.GlobalConfigSection, Project" />
<section name="replication" type="Project.Replication.ReplicationConfigSection, Project.Replication" />
<section name="processing" type="Project.Processing.ProcessingConfigSection, Project.Processing" />
</configSections>
<global>
<streamNames>
<streamName name="STREAM_DATA_14360" id="1"/>
</streamNames>
</global>
<replication>
<streams>
<stream nameId="1" />
</streams>
</replication>
<processing dataStreamId="1" />
</configuration>
结果:需要编辑代码以使用全局部分作为所有长名称的来源
优点:快速重命名,值的可重用性