如何获取具有特定主题标签值的注释节点

本文关键字:标签 节点 注释 何获取 获取 | 更新日期: 2023-09-27 18:36:28

这是我的XML结构:

<Note Id="2" Category="OFFICE" Date="12/6/2014 12:00:00 AM">
    <Hashtag>#hashnotes</Hashtag>
    <Hashtag>#hashnotes</Hashtag>
    <Hashtag>#good</Hashtag>
    <Text>this is #hashnotes app #hashnotes are #good</Text>
</Note>

我为在 C# 中使用 LINQ 搜索主题标签值编写的代码如下:

var user = XmlDoc.Element("HashNotes").Elements("Note")
             .Where(e => e.Element("Hashtag").Value == hashtag);

但无法在更深的节点中搜索。你能告诉我如何提取具有相同名称标签的元素的值吗?

如何获取具有特定主题标签值的注释节点

下面是如何执行此操作的示例:

stirng Xml = @"<Note Id='2' Category='OFFICE' Date='12/6/2014 12:00:00 AM'>
                    <Hashtag>#hashnotes</Hashtag>
                    <Hashtag>#hashnotes</Hashtag>
                    <Hashtag>#good</Hashtag>
                    <Text>this is #hashnotes app #hashnotes are #good</Text>
                    </Note>";
string SearchParam = "#hashnotes";
XElement element = XElement.Parse(Xml);
var nodes= element.Descendants("Hashtag").Where(e => e.Value == SearchParam);

如果要从磁盘上的 xml 文件执行操作,则:

XDocument document = XDocument.Load("FileUri");
var nodes = document.Descendants("Hashtag").Where(e => e.Value == SearchParam);

我正在将xml加载为字符串,在您的情况下,它也可以作为字符串或从xml文件加载。

当前代码将返回包含和#hashtag值的 Note 元素。

通过添加另一层来进一步细化搜索,例如,

var list = doc.Element("HashNotes")
              .Elements("Note")
              .Elements("Hashtag")
              .Where(p=>p.Value == "#hashnotes");

现在,这将返回Hashtag元素。

//更新

若要提取相关的 Note 元素,只需调用预期索引的 .Parent 属性即可。

int idx_wanted = 0;
return list[idx_wanted].Parent;

这应该有效:-

XDocument xdoc = XDocument.Load(@"YourXMLPath.xml");
List<string> result = xdoc.Descendants("Note").Elements("Hashtag")
                         .Where(x => x.Value == hashtag) 
                         .Select(x => x.Value).ToList();

但是,这显然会给出相同值的列表hashtag,如果您需要完整的节点,请不要应用 Value 属性。

更新:

要检索其他值,您可以这样做:--

var result = xdoc.Descendants("Hashtag")
                         .Where(x => x.Value == hashtag)
                         .Select(x => new 
                            {
                                HashTag = x.Value,
                                Id = x.Parent.Attribute("Id").Value,
                                Category = x.Parent.Attribute("Category").Value,
                                Date = x.Parent.Attribute("Date").Value
                            });