(Код в этом ответе был обновлен для Swift 3 и более поздних версий.)
По-видимому, ваша переменная path
является NSURL
(описывающей путь к файлу) , Чтобы получить путь в виде строки, используйте свойство path
, а не absoluteString
:
let exists = FileManager.default.fileExists(atPath: path.path)
absoluteString
возвращает URL-адрес в строчном формате, включая схему file:
и т. Д.
Пример:
let url = URL(fileURLWithPath: "/path/to/foo.txt")
// This is what you did:
print(url.absoluteString)
// Output: file:///path/to/foo.txt
// This is what you want:
print(url.path)
// Output: /path/to/foo.txt
Найденный FTAV отвечают самое полезное, поскольку это очень настраиваемо, но его функция xml2js имеет некоторые дефекты. Например, если дочерние элементы будут иметь равный tagnames, то они все будут сохранены в отдельном объекте, это означает, что порядок элементов не будет сохранен. В некоторых случаях мы действительно хотим сохранить порядок, таким образом, мы лучше храним данные каждого элемента в отдельном объекте:
function xml2js($xmlnode) {
$jsnode = array();
$nodename = $xmlnode->getName();
$current_object = array();
if (count($xmlnode->attributes()) > 0) {
foreach($xmlnode->attributes() as $key => $value) {
$current_object[$key] = (string)$value;
}
}
$textcontent = trim((string)$xmlnode);
if (strlen($textcontent) > 0) {
$current_object["content"] = $textcontent;
}
if (count($xmlnode->children()) > 0) {
$current_object['children'] = array();
foreach ($xmlnode->children() as $childxmlnode) {
$childname = $childxmlnode->getName();
array_push($current_object['children'], xml2js($childxmlnode, true));
}
}
$jsnode[ $nodename ] = $current_object;
return $jsnode;
}
Вот то, как это работает. Начальная структура XML:
<some-tag some-attribute="value of some attribute">
<another-tag>With text</another-tag>
<surprise></surprise>
<another-tag>The last one</another-tag>
</some-tag>
Результат JSON:
{
"some-tag": {
"some-attribute": "value of some attribute",
"children": [
{
"another-tag": {
"content": "With text"
}
},
{
"surprise": []
},
{
"another-tag": {
"content": "The last one"
}
}
]
}
}