Как сопоставить узел XML файла настроек в приложении C # - PullRequest
0 голосов
/ 14 декабря 2018

Мой код 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)

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Синтаксический анализ разметки языка с помощью регулярных выражений - очень плохая идея (см .: Использование регулярных выражений для разбора HTML: почему бы и нет? - это около HTML, но также относится к XML).

Вместо этого вы можете использовать библиотеку XML, предоставляемую в .NET, например, 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;
}
0 голосов
/ 14 декабря 2018

Вы можете попробовать это

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

Объяснение

  • <setting.*?> - Совпадения <setting, за которыми следует что угодно, кромеза новой строкой следует >.
  • [\w\W]+? - соответствует чему-либо один или несколько раз.(ленивый режим).
  • <\/setting> - Матчи </setting>

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...