Редактировать . Две головные боли назад я все еще надеялся. Теперь я думаю, что гораздо лучше переформатировать файл, чтобы избежать странных вещей, таких как элементы в одной строке, и выполнить некоторую очистку пробелов. Но это странно. Что за ошибка
Ну, это довольно странно, но я все равно пишу ответ.
Я проводил несколько тестов с примером XML, а некоторые номера строк / столбцов были получены из NSXML.
<?xml version="1.0"?>
<catalog class="something">
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
...
Некоторые журналы в виде
column, line
OPEN/CLOS element
(я довольно нуб, умная отладка)
15, 2 (A)
OPEN catalog
12, 3 (B)
OPEN book
14, 4
OPEN author
CLOS author
13, 5
OPEN title
CLOS title
13, 6
OPEN genre
CLOS genre
13, 7
OPEN price
CLOS price
20, 8
OPEN publish_date
CLOS publish_date
19, 9
OPEN description
CLOS description
CLOS book
...
Существует формула, которая всегда работает 1 , то есть:
columnPosition = columnNumber - length("<element>")
Например, рассмотрим вторую строку и журнал рядом с (A):
<catalog class="something">
Я ожидаю, что columnPosition
равно 0
, на самом деле:
len("<catalog class>") = 15
0 = 15 - length("<catalog class>")
Обратите внимание, что NSXML columnNumber
по-прежнему 15
независимо от того, что я пишу внутри тега "class", но это 9
, когда я удаляю весь тег. Со следующей строкой:
<catalog>
Я ожидаю, что columnPosition
равно 0
, на самом деле:
length("<catalog>") = 9
0 = 9 - length("<catalog>")
Теперь рассмотрим следующую строку и журнал рядом с (B):
<book id="bk101">
Я ожидаю, что columnNumber
равно 3
. На самом деле:
length("<book id>") = 9
3 = 12 - length("<book id>")
Ну, это странно. Я думаю, что это не отличное решение, но, по крайней мере, оно работает. Я не могу просто удалить пробел в начале строки, потому что он не работает, если есть строка вроде:
<catalog class="something"><book id="bk101">
Что вы думаете об этом? Я чувствую себя немного нубом, но я собираюсь проверить это как принятый ответ, если нет другого пути. Я с нетерпением жду того, что вы, ребята, думаете.
1 Избегать формальных доказательств краткости и отсутствия воли.