Я пытаюсь быстро получить значение атрибута в узле XML. Ниже приведен пример кода. Я не вижу способа получить значение, поскольку никакие свойства или методы, похоже, не позволяют этого.
for word in dictionary.words {
let xpath = "/strongsdictionary/entries/entry[greek[@unicode='" + word.word + "']]/pronunciation"
do {
let xmlnode = try document?.nodes(forXPath: xpath )
// Need to get value of attribute named 'strongs' from the node here.
} catch {
debugPrint("Error finding xpath path.")
break
}
}
Это для macOS.





xmlnode - это массив XMLNode. Итерировать массив узлов. Если ваш xpath возвращает элементы, приведите каждый узел к XMLElement. Из элемента вы можете получить его атрибуты.
let xmlnodes = try document?.nodes(forXPath: xpath)
for node in xmlnodes {
if let element = node as? XMLElement {
if let strongsAttr = element.attribute(forName: "strongs") {
if let strongs = strongsAttr.stringValue {
// do something with strongs
}
}
}
}
Вы можете объединить три if let в один, но вышеуказанное легче отлаживать.
Огромное спасибо! Ваш туз. Это помогло. Для меня это было не так очевидно, читая схематическую документацию.
Рад помочь. Пожалуйста, не забудьте принять ответ, который правильно отвечает на ваш вопрос. Щелкните галочку слева от ответа.
Атрибут - это просто еще один узел. Измените выражение XPath, чтобы найти его:
let xpath = "/strongsdictionary/entries/entry[greek[@unicode='" + word.word + "']]/pronunciation/@strongs"
Метод .nodes возвращает список узлов. Убедитесь, что список не равен нулю и имеет один узел:
// Get value of attribute named 'strongs'
if let xmlnode = try document?.nodes(forXPath: xpath ), xmlnode.count == 1 {
print(xmlnode[0].objectValue)
}
Я мог найти это таким образом, но не мог понять, как извлечь из этого пользу. Спасибо за помощь.
Это для macOS или iOS?