C# 如何在c语言中解析XML文件
我有一个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 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元素,希望您能从中获得一些有意义的内容。谢谢。由于某些原因,我的部分问题未显示,请查看我编辑的问题。谢谢。由于某些原因,我的部分问题未显示,请查看我编辑的问题。