Linq: Потомки не вернут результат - PullRequest
0 голосов
/ 02 июня 2018

У меня есть этот simpel xml файл:

<Document xmlns="urn:com.place:dps-if-gfc-request.001">
    <ReqHdr>
        <MsgId>IE1611240000000100000001</MsgId>
        <CreDtTm>2016-11-24T10:14:33.327Z</CreDtTm>
        <AppInstanceId>DPSH</AppInstanceId>
        <TxId>FirstTxId</TxId>
    </ReqHdr>
    <ReqTxInf>
        <PmtId>
            <TxId>SecondTxId</TxId>
        </PmtId>
        <MsgTyp>Request</MsgTyp>
        <CtgyPurp>
            <Prtry>ECRI</Prtry>
        </CtgyPurp>
    </ReqTxInf>
</Document>

Я пытаюсь получить содержимое первого элемента:

var xml = XElement.Load (@"myLovelyXmlFile.xml");
Console.Writeline(xml.Descendants("TxId").First().Value);

Ожидается, что результат будет FirstTxId , но ничего не возвращается.

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

этот код поможет вам:

XmlDocument document = new XmlDocument();
document.Load("YOUR_PATH");
var x= document.GetElementsByTagName("TxId").Item(0);

document.GetElementsByTagName получить набор узлов, которые вы хотите, чтобы только первый дочерний.поэтому мы выбираем пункт (0).

0 голосов
/ 02 июня 2018

Вы не получаете результат, поскольку в теге Document есть пространство имен.

Чтобы решить эту проблему, объявите пространство имен и добавьте его к имени элемента:

XNamespace ns = "urn:com.dovetailsystems:dps-if-gfc-request.001";
Console.WriteLine(xml.Descendants(ns + "TxId").First().Value);

Этот код будет выводить «FirstTxId» на консоль.

Вы также можете временно удалить пространство имен (после удаления не сохраняйте документ и не добавляйте его снова перед сохранением):

public static void RemoveNamespace(this XElement container)
{
    container.DescendantsAndSelf().Attributes().Where(x => x.IsNamespaceDeclaration).Remove();
    foreach (var elem in container.DescendantsAndSelf())
        elem.Name = elem.Name.LocalName;
}

Использование этого метода расширения: xml.Root.RemoveNamespace();

После удаления исходный код должен работать так, как ожидалось.

К сожалению, похоже, что нет способа игнорироватьпространство имен;так что либо добавление, либо удаление его должно сработать ...

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