c# - 如何在 C# 应用程序中匹配设置文件的 xml 节点
问题描述
我的 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)
解决方案
使用正则表达式解析标记语言是一个非常糟糕的主意(请参阅:使用正则表达式解析 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;
}
推荐阅读
- websocket - 转发https连接:客户端A->代理服务器B->客户端C->服务器D
- python - 在包含列表值的字典中使用 for 循环和 if 条件
- html - 是否可以将焦点集中在父元素内而不被所有子元素应用但一个特定的?
- c - printf() 在下一行打印 %s 之后的字符
- nearprotocol - 找不到命令“附近”
- c++ - 加载 HDR 纹理 Vulkan 的问题
- scala - 多次连接后 Spark 数据集无法解析列
- java - JavaFX 更新画面
- unity3d - 第一次按下转义时光标不可见,但随后的所有时间都是
- javascript - 如何仅使用 ChartjsPluginStacked100 javascript,没有打字稿