Как читать XML в C # с XElement? - PullRequest
       24

Как читать XML в C # с XElement?

0 голосов
/ 02 ноября 2019

У меня есть этот xml

<Folder.FolderStructure
    xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://schemas.datacontract.org/2004/07/FileSiteAPI.Models">
    <a_attr i:nil="true" />
    <checkedout>false</checkedout>
    <children>
        <Folder.FolderStructure>
            <checkedout>false</checkedout>
            <children />
            <created>2018-11-29T13:58:57</created>
            <edited>2018-11-29T13:58:57</edited>
            <extension>MSG</extension>
            <id>36878331</id>
            <rootfolder>false</rootfolder>
            <searchfolder>false</searchfolder>
            <size>29696</size>
            <state i:nil="true" />
            <version>1</version>
        </Folder.FolderStructure>
        <Folder.FolderStructure>
            <checkedout>false</checkedout>
            <children />
            <created>2019-01-15T10:18:03</created>
            <edited>2019-01-15T10:18:03</edited>
            <extension>DOCX</extension>
            <id>37584622</id>
            <rootfolder>false</rootfolder>
            <searchfolder>false</searchfolder>
            <size>42345</size>
            <state i:nil="true" />
            <version>1</version>
        </Folder.FolderStructure>
        <Folder.FolderStructure>
            <a_attr i:nil="true" />
            <checkedout>false</checkedout>
            <children i:nil="true" />
            <created>0001-01-01T00:00:00</created>
            <edited>0001-01-01T00:00:00</edited>
            <extension i:nil="true" />
            <id>2478514</id>
            <rootfolder>false</rootfolder>
            <searchfolder>false</searchfolder>
            <size>0</size>
            <state i:nil="true" />
            <version>0</version>
        </Folder.FolderStructure>
    </children>
    <created>0001-01-01T00:00:00</created>
    <edited>0001-01-01T00:00:00</edited>
    <extension i:nil="true" />
    <id>2469288</id>
    <rootfolder>false</rootfolder>
    <searchfolder>false</searchfolder>
    <size>72041</size>
    <state i:nil="true" />
    <text>Public</text>
    <version>0</version>
</Folder.FolderStructure>

, но когда я анализирую его и пытаюсь прочитать элементы 3 Folder.FolderStructure, он возвращается с пустым набором.

            XElement folder_xml = XElement.Parse(xml_str);

            List<XElement> elements = folder_xml.Elements("Folder.FolderStructure").ToList();

            Console.WriteLine(elements.Count);

Кто-нибудь знаетчто не так?

1 Ответ

1 голос
/ 03 ноября 2019

Вам необходимо определить пространство имен и использовать Потомки вместо Элементы :

XElement folder_xml = XElement.Parse(xml_str);

XNamespace ns = "http://schemas.datacontract.org/2004/07/FileSiteAPI.Models"; 
var elements = folder_xml.Descendants(ns + "Folder.FolderStructure").ToList();

Console.WriteLine(elements.Count);
...