C# 如何在c语言中解析XML文件

C# 如何在c语言中解析XML文件,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,我有一个XML,其结构与此类似: <?xml version="1.0" encoding="UTF-8"?> <CompanyName> <AttrContainer> <Attr type="String"> <Name value="'Name'" /> <Value value="'AttrContainer'" /> </

我有一个XML,其结构与此类似:

<?xml version="1.0" encoding="UTF-8"?>
<CompanyName>
    <AttrContainer>
        <Attr type="String">
            <Name value="'Name'" />
            <Value value="'AttrContainer'" />
        </Attr>
        <SubContainer>
            <AttrContainer value="'WSSMetadata'" />
            <AttrContainer>
                <Attr type="String">
                    <Name value="'Name'" />
                    <Value value="'AttrContainer'" />
                </Attr>
                <SubContainer>
                    <WSSMetadata value="'afe2e194-0ce7-4bfc-b446-9623e4fe7189'" />
                    <AttrContainer>
                        <Attr type="String">
                            <Name value="'Name'" />
                            <Value value="'WSSMetadata'" />
                        </Attr>
                        <Attr type="Uuid">
                            <Name value="'scanID'" />
                            <Value value="afe2e194-0ce7-4bfc-b446-9623e4fe7189" />
                        </Attr>
                        <Attr type="String">
                            <Name value="'imagePath'" />
                        </Attr>
                        <Attr type="String">
                            <Name value="'imagePathHD'" />
                        </Attr>
                        <Attr type="String">
                            <Name value="'imagePathThumbnail'" />
                        </Attr>
                        <Attr type="String">
                            <Name value="'imagePathGrey'" />
                            <Value value="'Images/afe2e194-0ce7-4bfc-b446-9623e4fe7189_grey.jpg'" />
                        </Attr>
                        <Attr type="String">
                            <Name value="'imagePathGreyHD'" />
                            <Value value="'Images/afe2e194-0ce7-4bfc-b446-9623e4fe7189_grey_hd.jpg'" />
                        </Attr>
                        <Attr type="String">
                            <Name value="'imagePathGreyThumbnail'" />
                            <Value value="'Images/afe2e194-0ce7-4bfc-b446-9623e4fe7189_grey_thumbnail.jpg'" />
                        </Attr>
                    </AttrContainer>
                </SubContainer>
            </AttrContainer>
        </SubContainer>
    </AttrContainer>
</CompanyName>
但是它没有元素

我的问题是: 这段代码有什么问题,我无法获取CompanyName元素

如何获取所有元素的列表

当我得到元素列表时,如何读取和更改其内容


我想你想要这个:

var attr = doc.Root.Elements("AttrContainer");

.Elements返回该名称的子元素。CompanyName是您的根节点,您正在尝试搜索它的子节点,这些子节点是AttrContainer。

我想您希望这样:

var attr = doc.Root.Elements("AttrContainer");
.Elements返回该名称的子元素。CompanyName是根节点,您正在尝试搜索它的子节点,这些子节点是attrcainer。

doc.root返回元素,因此进一步选择名为CompanyName的元素将不会返回任何元素。您实际上是在尝试选择属于的子元素的所有元素

此代码将选择所有元素,无论其深度如何。我之所以建议这样做,是因为您的示例XML有几个元素

// Read all Attr elements
IEnumerable<XElement> subContainerElements = doc.Root.Descendants("SubContainer");

foreach (XElement subContainerElement in subContainerElements)
{
    // Work with <SubContainer> element here
}
Root返回元素,因此进一步选择名为CompanyName的元素不会返回任何元素。您实际上是在尝试选择属于的子元素的所有元素

此代码将选择所有元素,无论其深度如何。我之所以建议这样做,是因为您的示例XML有几个元素

// Read all Attr elements
IEnumerable<XElement> subContainerElements = doc.Root.Descendants("SubContainer");

foreach (XElement subContainerElement in subContainerElements)
{
    // Work with <SubContainer> element here
}
这段代码有什么问题,我无法获取companyname元素

xml的根元素是CompanyName。因此,您的代码所做的,本质上是要求“给我根CompanyName元素的子元素CompanyName元素”。因此,列表是空的

如何获取所有子容器元素的列表

// Read all Attr elements
IEnumerable<XElement> subContainerElements = doc.Root.Descendants("SubContainer");

foreach (XElement subContainerElement in subContainerElements)
{
    // Work with <SubContainer> element here
}
你可以用

var subContainers = doc.Root.Descendants("SubContainer");
当我得到Subcainer元素列表时,如何读取和更改其内容

假设所有子容器中的所有AttrContainer中都存在一个Attr元素,那么这将读取并更改每个Attr元素的类型-希望您可以从中派生出一些有意义的内容。

这段代码有什么问题,我无法获取companyname元素

xml的根元素是CompanyName。因此,您的代码所做的,本质上是要求“给我根CompanyName元素的子元素CompanyName元素”。因此,列表是空的

如何获取所有子容器元素的列表

// Read all Attr elements
IEnumerable<XElement> subContainerElements = doc.Root.Descendants("SubContainer");

foreach (XElement subContainerElement in subContainerElements)
{
    // Work with <SubContainer> element here
}
你可以用

var subContainers = doc.Root.Descendants("SubContainer");
当我得到Subcainer元素列表时,如何读取和更改其内容


这将读取并更改每个第一个Attr元素的类型,假设所有子容器中的所有Attr容器中都存在一个Attr元素,希望您能从中获得一些有意义的内容。

谢谢。由于某些原因,我的部分问题未显示,请查看我编辑的问题。谢谢。由于某些原因,我的部分问题未显示,请查看我编辑的问题。