[英]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.