gpt4 book ai didi

C# XML 通过键值选择字典节点

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

我有一个包含以下内容的 XML 文件(这是一个 iTunes 文件):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Major Version</key><integer>1</integer>
<key>Minor Version</key><integer>1</integer>
<key>Application Version</key><string>12.3.3.17</string>

...

<key>Music Folder</key><string>file://localhost/C:/Users/username/longpath/</string>
</dict>
</plist>

如何获取最后一个字符串的值,其中 <key>是“音乐文件夹”?

这是一个非常大的文件,所以我不想遍历所有节点。

我尝试了以下一些方法:

XmlNode location = xmlDocument.SelectSingleNode("descendant::dict[key='Music Folder']");
location = xmlDocument.SelectSingleNode("//text()[.='Music Folder']");
location = xmlDocument.SelectSingleNode("string[last()]");
location = xmlDocument.SelectSingleNode("dict::string[last()]");
location = xmlDocument.SelectSingleNode("descendant::dict[string[last()]]");

我对 XPath 表达式不是很熟悉,无法正确表达。

我也对 LINQ 解决方案持开放态度。

最佳答案

您的文档的 XPath 表达式是在文档根目录的上下文中计算的,因此您需要理想地指定 plist 节点,我假设您需要字符串值,因此您需要导航到那个节点。

XmlNode location = xmlDocument.SelectSingleNode("plist/dict/key[.='Music Folder']/following-sibling::string[1]")

请注意,该值并未嵌套在键元素内,而是紧随其后的同级元素。鉴于这出现在最后你可能会逃脱:

XmlNode location = xmlDocument.SelectSingleNode("plist/dict/string[last()]")

我会在 XPath 中明确指定 plist 节点,因为它将可能的匹配保持在最低限度。另一点需要注意的是,您的 XPath 最终可能会以底层技术迭代每个节点,这取决于您构建表达式的方式,因为某些实现可能能够应用优化。

你很接近,但我看到你混淆了运算符并使用 ::[] 其中 / 会更合适。 :: 将轴与节点名称分开,因此 descendants::dict 获取名为 dict 的上下文节点 (xmlDocument) 的所有后代。 / 运算符实际上是 child:: 的简写。 [] 是缩小结果集的过滤谓词。

关于C# XML 通过键值选择字典节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39686364/

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