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(即第三方名称(

XML配置中的变量

您可以简单地在<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>

结果:需要编辑代码以使用全局部分作为所有长名称的来源

优点:快速重命名,值的可重用性