繁体   English   中英

如何在C#应用程序中匹配设置文件的xml节点

[英]How to match xml node of Settings file in C# application

我的C#代码如下。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="ICTRExchange.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
  <userSettings>
    <ICTRExchange.Properties.Settings>
      <setting name="ServerIP" serializeAs="String">
        <value />
      </setting>
      <setting name="ServerPort" serializeAs="String">
        <value>0</value>
      </setting>

如何在C#中使用正则表达式进行匹配。 我在下面尝试正则表达式。 但这不是正确的操作。

我的目标节点是"ServerPort"

var regex = new Regex("<setting name=\"ServerPort\"(.*?)</setting>");
regex.match(xmlstring)

使用regex解析标记语言是一个非常糟糕的主意(请参阅: 使用正则表达式解析HTML:为什么不呢? -它在HTML之上,但也适用于XML)。

相反,您可以使用.NET中提供的XML库,例如System.Xml

这是您可以在其上构建应用程序的代码片段(我将XML存储在testxml.xml文件中):

static void Main(string[] args)
{
  XmlDocument xml = new XmlDocument();
  xml.Load(@"C:/users/MyUser/desktop/testxml.xml");
  var settings = xml.SelectNodes("configuration/userSettings/ICTRExchange.Properties.Settings")[0].ChildNodes;
  XmlNode settingsWithServerPort = null;
  foreach (XmlNode node in settings)
    if (node.Attributes["name"].Value == "ServerPort")
      settingsWithServerPort = node;
}

你可以试试这个

<setting.*?>[\w\W]+?<\/setting>

说明

  • <setting.*?> -匹配<setting后跟除换行符之外的所有内容,再加上>
  • [\\w\\W]+? -一次或多次匹配。 (懒惰模式)。
  • <\\/setting> -匹配</setting>

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM