Я пытаюсь проанализировать Apple plist файл, и я должен получить Узел массива в нем. К сожалению, его единственным уникальным идентификатором является одноуровневый Узел прямо перед ним, <key>ProvisionedDevices</key>
. Прямо сейчас мои лучшие мысли состоят в том, чтобы использовать запросы XPath Java или Node.indexOf
.
Вот пример:
<plist version="1.0">
<dict>
<key>ApplicationIdentifierPrefix</key>
<array>
<string>RP8CBF4MRE</string>
</array>
<key>CreationDate</key>
<date>2010-05-10T11:44:35Z</date>
<key>DeveloperCertificates</key>
<array>
...
<key>ProvisionedDevices</key>
<array>
... // I need the Nodes here
</array>
</dict>
</plist>
Спасибо!
Это работает:
def findArray(key: Elem, xml: Elem) = {
val components = xml \ "dict" \ "_"
val index = components.zipWithIndex find (_._1 == key) map (_._2)
index map (_ + 1) map components
}
/**
* Takes in plist key-value format and returns a Map[String, Seq[Node]]
*/
def plistToMap(nodes:Seq[Node]) = {
nodes.grouped(2).map {
case Seq(keyNode, elementNode) => (keyNode.text, elementNode)
}.toMap
}
Тогда вы можете использовать его так:
println(plistToMap(xml \\ "dict" \ "_").get("ProvisionedDevices"))