проанализируйте XML с SimpleXML, который имеет несколько пространств имен [дубликат]

Ваш код инициализирует NLog, затем вызывает NLog.LogManager.Shutdown(), а затем запускает WebHost.

Попробуйте вместо этого:

   public static void Main(string[] args)
   {
        // NLog: setup the logger first to catch all errors
        var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
        try
        {
            logger.Debug("init main");
            BuildWebHost(args).Build().Run();
        }
        catch (Exception ex)
        {
            //NLog: catch setup errors
            logger.Error(ex, "Stopped program because of exception");
            throw;
        }
        finally
        {
            // Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
            NLog.LogManager.Shutdown();
        }
    }

    public static IWebHostBuilder BuildWebHost(string[] args)
    {
            var webHost = new WebHostBuilder()
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .ConfigureAppConfiguration((hostingContext, config) =>
                {
                    var env = hostingContext.HostingEnvironment;
                    config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                          .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
                    config.AddEnvironmentVariables();
                })
                .UseStartup<Startup>()
                .ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                    logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
                })
                .UseNLog();
        return webHost;
    };
11
задан perrohunter 11 April 2009 в 20:28
поделиться

2 ответа

Я думаю, вам нужно зарегистрировать пространство имен и получить доступ к XPath. Что-то вроде следующего должно помочь вам (у меня нет возможности проверить это).

$xml = simplexml_load_string($res, NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/");
$xml->registerXPathNamespace('soap-env', 'http://schemas.xmlsoap.org/soap/envelope/');
$xml->registerXPathNamespace('eb', 'http://www.ebxml.org/namespaces/messageHeader');
$xml->registerXPathNamespace('wsse', 'http://schemas.xmlsoap.org/ws/2002/12/secext');

Тогда вы можете сделать что-то вроде:

foreach($xml->xpath('//eb:MessageHeader') as $header)
{
    var_export($header->xpath('//eb:CPAId')); // Should output 'something'.
}

Возможно, вам не нужно регистрировать пространство имен, думая об этом, поскольку они уже присутствует в XML. Хотя не уверен в этом, нужно будет проверить.

Надеюсь, это поможет.

32
ответ дан 3 December 2019 в 01:34
поделиться

Это мыльный конверт. Возможно, вы захотите использовать мыльный клиент, чтобы абстрагировать весь xml-разбор. PHP поставляется с довольно хорошим мыльным клиентом , включенным по умолчанию.

0
ответ дан 3 December 2019 в 01:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: