Xdocument разобрать файл и прочитать значения - PullRequest
0 голосов
/ 15 января 2020

У меня есть образец ниже XML, мне нужно получить значения для следующих двух полей txJu и ddate. У меня также есть код, но он дает нулевое ожидание

<Doc id="580171" ddate="2019-06-21" >                       
    <ref dtRef="2019-08-21">                    
        <dr>                
            <cr>            
                <pj>        
                    <pr>    
                        <dDup txJu="0.00" txFi="0.00" txcOp="0.00" />
                        <comp txJu="12.96" txFi="2.45" txOp="0.00" />
                    </pr>   
                </pj>       
            </cr>           
        </dr>               
    </ref>                  
</Doc>  





  var xdoc = XDocument.Load(file);
   string txJu = xdoc.Root.Element("comp").Attribute("txJu").Value;
   string ddate = xdoc.Root.Element("Doc").Attribute("ddate").Value;  

1 Ответ

1 голос
/ 15 января 2020

Есть несколько проблем с вашим кодом. Ваш элемент Root не содержит узла comp, элемент Doc сам является root, string ddate = string value = ... недопустимое объявление C#. Вы можете изменить свой код следующим образом

var compElement = xdoc.Root?.DescendantsAndSelf("comp").FirstOrDefault();
string txJu = compElement?.Attribute("txJu")?.Value;
string ddate = xdoc.Root?.Attribute("ddate")?.Value;
string value = ddate;

. Использовать метод DescendantsAndSelf, чтобы получить коллекцию отфильтрованных элементов comp и использовать первый из них. Доступ к атрибуту ddate непосредственно в элементе Root. Используйте null-conditional operator ?, чтобы избежать возможных исключений нулевой ссылки

...