我有一个xml,如:
<Customer id="">
<Name />
<Address />
</Customer>
我想只选择一个没有子节点的属性的根节点头(不是页脚):
<Customer id="">
答案 0 :(得分:2)
如果属性是根元素,则可以使用Root
属性:
XDocument Doc = XDocument.Parse(StringXML);
var RootNode= Doc.Root;
string NodeName = RootNode.Name.ToString();
string AttributeValue = RootNode.Attribute("id").Value;
如果xml中有多个Customer节点,则必须使用linq:
var nodes = from customer in Doc.Descendants("Customer")
select new {
NodeName = customer.Name.ToString(),
Id = customer.Attribute("id").Value
};
要获取所有属性,您可以这样使用Attributes()
:
var nodess = from customer in Doc.Descendants("Customer")
select new {
NodeName = customer.Name.ToString(),
Attributes = customer.Attributes()
};
答案 1 :(得分:1)
如果您只想将此节点作为字符串,则可以使用Root
属性,然后按Environment.NewLine
分割根并取第一个:
XDocument xdoc = XDocument.Parse(InnerXML);
var result = xdoc.Root.ToString()
.Split(new string[] {Environment.NewLine}, StringSplitOptions.None)
.First();
结果是:<Customer id="">
的 Additional1 强>:
如果要获取属于root的所有属性名称和值,则可以使用:
var rootAttributesDatas = xdoc.Root
.Attributes()
.Select(x => new { AttributeName = x.Name, AttributeValue = x.Value })
.ToList();
的 Additional2 强>:
如果您有多个customer
节点,并希望选择所有关于它们的数据作为列表:
var allCustomerNodeDatas = xdoc.Root.Descendants("Customer")
.Select(x => new
{
NodeName = x.Name,
AttributesDatas = x.Attributes().Select(attr => new
{
AttributeName = attr.Name,
AttributeValue = attr.Value
}).ToList()
}).ToList();