gpt4 book ai didi

c# - 根据父元素的值获取xml的子元素

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:16 25 4
gpt4 key购买 nike

我有一个如下所示的 XML 字符串:

<?xml version="1.0" encoding="utf-8"?>
<Report>
<Version Name="2.0">
<Note>The meaning of life is 42.</Note>
<Note>Hitchiker's Guide to the Galaxy</Note>
</Version>
<Version Name="2.1">
<Note>Football is awesome!</Note>
<Note>Let's go sailing!</Note>
</Version>
</Report>

我正在尝试将每个版本的信息输出到我的网页。到目前为止,我能够获得版本号,但无法将注释与版本号相关联。这是我拥有的:

var xml = Client.GetReleaseNotes();

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);

var versions = Client.GetUniqueNames(doc.SelectNodes("//Version"));
versions.Reverse();

Client.GetReleaseNotes(); 给我要解析的 XML 字符串。

public List<string> GetUniqueNames(XmlNodeList nodes)
{
List<string> list = new List<string>();
foreach (XmlNode node in nodes)
{
var attr = node.Attributes["Name"] ?? node.Attributes["Title"];
string name = attr.InnerText;
if (!list.Contains(name) && name.IndexOf("sample", StringComparison.OrdinalIgnoreCase) == -1)
list.Add(name);
}

list.Sort();

return list;
}

public List<string> GetVersionNotes(XmlNodeList nodes)
{
List<string> list = new List<string>();

foreach (XmlNode node in nodes)
{
list.Add(node.Value);
}

list.Sort();

return list;
}

正如您在下面看到的,我使用了一个 foreach 循环将版本号输出到屏幕上。

<section id="release-notes">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center">
<h2 class="section-heading">Release Notes</h2>
</div>
</div>
<div class="row">
@foreach (string version in versions)
{
<div class="col-md-4">
<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
<div class="panel panel-default">
<div class="panel-heading" role="tab" id="webHeading">
<h4 class="panel-title">
<a role="button" data-toggle="collapse" data-parent="#accordion" href="#webPanel" aria-expanded="true" aria-controls="webPanel">
Version @version
</a>
</h4>
</div>
<div id="webPanel" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="webHeading">
<ul class="list-group">
@{
var notes = Client.GetVersionNotes(doc.SelectNodes("//version[@value='" + version + "']/note"));
}

@foreach (string note in notes)
{
<li class="list-group-item">@note</li>
}
</ul>
</div>
</div>
</div>
</div>
}
</div>
</div>
</section>

然后我继续使用另一个 foreach 循环并尝试获取每个版本的子元素。这样我就可以将注释与其版本相关联。我读到您可以使用 SelectNodes 方法根据特定条件(如父节点的值)获取子节点。这就是促使我创建行 var notes = Client.GetVersionNotes(doc.SelectNodes("//version[@value='"+ version + "']/note"));

但是我仍然无法获取笔记。我究竟做错了什么?有人可以指出我正确的方向吗?

最佳答案

请注意,XPath 中的元素和属性名称区分大小写。此外,您的 XPath 中的属性名称错误(应该是 @Name 而不是 @value)。尝试通过这种方式获取相应的 Note 元素:

doc.SelectNodes("//Version[@Name='" + version + "']/Note")

关于c# - 根据父元素的值获取xml的子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32534615/

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