Мне нужно прочитать данные XML-файла, но из-за атрибута он не работает - PullRequest
0 голосов
/ 25 октября 2018

Я хочу прочитать XML-файл, но из-за атрибута узла Document он не прочитал файл.

    Code C#: 
XmlDocument xmldoc = new XmlDocument();
            xmldoc.Load(HttpContext.Server.MapPath("~/Content/Images/MMS-CREATE-ALLA-ALLAH2H1-23102018-000170-INP.xml"));
            XmlNode settings = xmldoc.SelectSingleNode("Document[@xmlns='urn:iso:std:iso:20022:tech:xsd:pain.009.001.01']/MndtInitnReq/GrpHdr");
            stu.BranchName = settings.SelectSingleNode("MsgId").InnerText;

XML FIle:
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.009.001.01">
    <MndtInitnReq>
        <GrpHdr>
            <MsgId>10005226074</MsgId>
            <CreDtTm>2018-10-23T15:20:56</CreDtTm>
    </GrpHdr>
</MndtInitnReq>
</Document>

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Я не думаю, что загрузка этого xml должна быть проблемой.Я подтвердил это, загрузив xml, который вы разместили в объекте XmlDocument.Однако, я думаю, ваш xpath для получения узла «settings» должен иметь пространство имен xml во всех тегах после Document.Таким образом, xpath должен быть " / [local-name () = 'Document' и namespace-uri () = 'urn: iso: std: iso: 20022: tech: xsd: pain.009.001.01'] / [local-name () =' MndtInitnReq 'и namespace-uri () =' urn: iso: std: iso: 20022: технология: xsd: pain.009.001.01 '] / * [local-name () = 'GrpHdr' и namespace-uri () = 'urn: iso: std: iso: 20022: технология: xsd: pain.009.001.01']"

0 голосов
/ 25 октября 2018

У вас есть пространство имен, которое необходимо использовать для получения данных.Попробуйте Xml Linq:

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication75
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            XNamespace ns = doc.Root.GetDefaultNamespace();

            string msgId = (string)doc.Descendants(ns + "MsgId").FirstOrDefault();
            XElement xCreDtTm =  doc.Descendants(ns + "CreDtTm").FirstOrDefault();

            //will give 1/1/01 when null
            DateTime CreDtTm = xCreDtTm == null ? new DateTime() : (DateTime)xCreDtTm;


        }

    }



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