【发布时间】:2013-01-09 01:09:36
【问题描述】:
iTunes 为我提供了一个我不习惯使用的导出 xml 结构(请参阅 xml 代码):
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<dict>
<key>68768</key>
<dict>
<key>Track ID</key><integer>68768</integer>
<key>Name</key><string>ABBA Medley</string>
<key>Artist</key><string>Party All Stars</string>
<key>Disc Number</key><integer>1</integer>
<key>Track Number</key><integer>17</integer>
<key>Persistent ID</key><string>B121116C66BE0F4B</string>
</dict>
<key>68781</key>
<dict>
<key>Track ID</key><integer>68781</integer>
<key>Name</key><string>Afflitto</string>
<key>Artist</key><string>Fiocco</string>
<key>Disc Number</key><integer>1</integer>
<key>Track Number</key><integer>9</integer>
<key>Persistent ID</key><string>5D09837999591307</string>
</dict>
<key>68793</key>
<dict>
<key>Track ID</key><integer>68793</integer>
<key>Name</key><string>Agadou</string>
<key>Artist</key><string>Saradossa Band</string>
<key>Disc Number</key><integer>1</integer>
<key>Track Number</key><integer>4</integer>
<key>Persistent ID</key><string>4DFFF3C3498C02B4</string>
</dict>
</dict>
</dict>
</plist>
我的目标是尽可能在 c# 中使用 LinqToXml 实现以下数组:
17 ABBA Medley B121116C66BE0F4B
9 Afflitto 5D09837999591307
4 Agadou 4DFFF3C3498C02B4
这可能吗?
我写了一些基本的 c# 代码,但在路上一个闪电击中了我......
XDocument doc = XDocument.Load(iTunesXmlFile);
var linqtoxml = from node in doc.Descendants("dict") select node; // ooo Boy :(
foreach (var dict in linqtoxml)
{
// and lightning bolt again...
}
Ps:很明显,我无法更改 xml 结构。
Pps:我知道,这是一个清理 iTunes XML 版本,但基本概念是作为案例研究提出的。
【问题讨论】:
-
我对 iTunes XML 不熟悉,
<dict>节点总是会有 3 级吗? -
是的!这是 PC 上的 iTunes 11 版本。
-
格式确实不是很奇怪...新行刚刚关闭,因此看起来比实际更混乱。这只是找到写查询的问题。但是看看这个question。我很确定它是重复的。
-
你是对的 psubsee2003!非常感谢!
标签: itunes linq-to-xml