gpt4 book ai didi

c# - 选择包含特定属性的所有 xml 节点

转载 作者:数据小太阳 更新时间:2023-10-29 01:46:41 25 4
gpt4 key购买 nike

我必须选择所有包含具有特定名称的属性的节点。

这是我目前的方法,不是工作方法。

public List<string> RetrieveValuesForAttribute(string attributeName)
{
var list = new List<string>();

string xpath = "//*[@Name='" + attributeName + "']";
XmlNodeList xmlNodeList = document.SelectNodes(xpath);

foreach (XmlNode xmlNode in xmlNodeList)
{
list.Add(xmlNode.Attributes[attributeName].InnerText);
}

return list;
}

我尝试选择所有包含方法参数 attributeName 中给定名称的属性的节点,并将值添加到变量 list

示例:

这个方法调用:

List<string> result = RetrieveValuesForAttribute("itemSelectedHandler");

应该返回一个包含字符串“OnSelectedRelatedContactChanged”的列表

这是 xml 文件:

<GroupBoxWrapper id="gbRelatedContacts" text="Related Contacts">
<TabIndex>0</TabIndex>
<TabStop>false</TabStop>
<PanelWrapper id="pnlRelatedContactsView" width="1350">
<TabIndex>0</TabIndex>
<TabStop>false</TabStop>
<ListViewWrapper id="lvRelatedContacts" itemSelectedHandler="OnSelectedRelatedContactChanged" itemDoubleClickHandler="OnRelatedContactDoubleClick">
<TabIndex>0</TabIndex>
<TabStop>true</TabStop>
<ListViewColumns>
<Column title="Name" mapNode="Contact\Name" />
<Column title="Lastname" mapNode="Contact\Lastname" />
</ListViewColumns>
</ListViewWrapper>
</PanelWrapper>
</GroupBoxWrapper>

更多问题:用 LINQ 解决这个问题会更好吗?

解决方案一:谢谢ywm

public List<string> RetrieveValuesForAttribute(string attributeName)
{
var list = new List<string>();

string xpath = @"//*[@" + attributeName + "]";
XmlNodeList xmlNodeList = document.SelectNodes(xpath);

foreach (XmlNode xmlNode in xmlNodeList)
{
list.Add(xmlNode.Attributes[attributeName].InnerText);
}

return list;
}

解决方案 2:谢谢你,Jon Skeet

public List<string> RetrieveValuesForAttribute(string attributeName)
{
//document is an XDocument
return document.Descendants()
.Attributes(attributeName)
.Select(x => x.Value)
.ToList();
}

在我看来,LINQ to XML 解决方案要优雅得多。

最佳答案

如果您可以为此使用 LINQ to XML,那将是微不足道的:

// Note that there's an implicit conversion from string to XName,
// but this would let you specify a namespaced version if you want.
public List<string> RetrieveValuesForAttribute(XName attributeName)
{
// Assume document is an XDocument
return document.Descendants()
.Attributes(attributeName)
.Select(x => x.Value)
.ToList();
}

关于c# - 选择包含特定属性的所有 xml 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15945733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com