Как преобразовать объект памяти xpath в строку

Обновлено: 07.07.2024

В данной главе описываются функции, которые при реализации XPath должны быть всегда внесены в библиотеку функций, используемых для обработки выражений.

Каждая функция в этой библиотеке описывается с помощью прототипа, в котором указываются тип возвращаемого значения, название функции и тип аргументов. Если за описанием типа аргумента следует знак вопроса, то данный аргумент является необязательным, в противном случае аргумент обязателен.

4.1 Функции обработки набора узлов

Функция last возвращает число, равное размеру контекста обрабатываемого выражения.

Функция position возвращает число, равное положению в контексте обрабатываемого выражения.

Функция count возвращает количество узлов в наборе, представленном в качестве аргумента.

id("foo") находит элемент с уникальным идентификатором foo

Среди набора узлов, указанного в аргументе, функция local-name находит тот узел, который в документе встретится первым, и выделяет локальную часть его расширенного имени. Если в аргументе функции представлен пустой набор узлов или первый обнаруженный узел не имеет расширенного имени, возвращается пустая строка. Если аргумент функции отсутствует, то по умолчанию используется набор, состоящий из единственного члена - узла контекста.

В наборе, указанном в аргументе, функция namespace-uri находит тот узел, который в документе встретится первым, и в его расширенном имени выделяет URI пространства имен. Если указанный в аргументе набор узлов пуст, первый найденный узел не имеет расширенного имени, или же URI пространства имен в расширенном имени оказался нулевым, то функция возвращает пустую строку. Если аргумент отсутствует, то по умолчанию берется набор, в котором узел контекста является единственным членом.

Замечание: Для узлов, которые не соответствуют ни элементам, ни атрибутам, функция namespace-uri возвращает пустую строку.

В наборе, указанном в аргументе, функция name находит узел, который в документе встретится первым, и возвращает строку, содержащую QName, которое представляет расширенное имя данного узла. Указанная конструкция QName должна представлять расширенное имя, исходя из деклараций пространств имен, доступная для того узла, чье расширенное имя должно быть представлено. Как правило, это тот самый QName, который был представлен в исходном документе XML. Однако это не обязательно должно быть так в случае, когда декларации, воздействующие на данный узел, с одним и тем же пространством имен связывают несколько префиксов. Тем не менее, реализация может содержать сведения о первоначальном префиксе представляемых узлов, в таком случае может выполняться проверка с тем, чтобы возвращаемая строка была всегда такой же, как QName, используемый в исходном документе XML. Если указанный в аргументе набор узлов пуст или первый узел не имеет расширенного имени, возвращается пустая строка. Если аргумент опущен, то по умолчанию используется набор, содержащий только узел контекста.

Замечание: Для узлов, не являющихся ни элементом, ни атрибутом, строка, возвращаемая функцией name , будет той же самой, что и строка, возвращаемая функцией local-name .

4.2 Функции обработки строк

Набор узлов преобразуется в строку, соответствующую строковому значению того узла в этом наборе, который первым встретится в документе. Если представленный набор узлов пуст, возвращается пустая строка.

NaN преобразуется в строку NaN

положительный нуль преобразуется в строку 0

отрицательный нуль преобразуется в строку 0

положительная бесконечность преобразуется в строку Infinity

отрицательная бесконечность преобразуется в строку -Infinity

Если число целое, то оно представляется в десятичной форме Number без десятичной точки и ведущих нулей. Если число отрицательное, то его представлению предшествует знак минус ( - ).

Булево значение false преобразуется в строку false . Булево значение true преобразуется в строку true .

Если аргумент опущен, то по умолчанию используется набор узлов, единственным членом которого является узел контекста.

Замечание: Функция string не предназначена для преобразования чисел в строки для показа пользователю. Для этой цели предназначены функция format-number и элемент xsl:number из [XSLT].

Функция concat возвращает объединение представленных аргументов.

Функция starts-with возвращает true если строка второго аргумента совпадает с началом строки первого аргумента. В противном случае функция возвращает false.

Функция contains возвращает true если строка второго аргумента является частью строки первого аргумента. В противном случае функция возвращает false.

Функция substring-before возвращает ту часть строки первого аргумента, которая предшествует первому появлению строки второго аргумента. Если строка второго аргумента не содержится в строке первого аргумента, то функция возвращает пустую строку. Например, substring-before("1999/04/01","/") возвратит 1999 .

Функция substring-after возвращает ту часть строки первого аргумента, которая следует за первым появлением строки второго аргумента. Если строка второго аргумента не содержится в строке первого аргумента, функция возвращает пустую строку. Например, substring-after("1999/04/01","/") возвращает 04/01 , а substring-after("1999/04/01","19") возвращает 99/04/01 .

Функция substring возвращает ту часть строки первого аргумента, которая начинается с позиции, указанной вторым аргументом, и имеет длину, указанную в третьем аргументе. Например, substring("12345",2,3) возвращает "234" . Если третий аргумент не был представлен, функция возвращает подстроку, начинающуюся с позиции, указанной во втором аргументе, и продолжащуюся до конца строки. Например, substring("12345",2) возвращает "2345" .

Точнее выражаясь, каждый символ в строке (см. [ 3.6 Строки ]) имеет номер позиции: позиция первого символа - 1, второго символа - 2 и т.д.

Замечание: Такой порядок отличается от принятого в Java и ECMAScript, где метод String.substring считает позицию первого символа нулевой.

substring("12345", 1.5, 2.6) возвращает "234"

substring("12345", 0, 3) возвращает "12"

substring("12345", 0 div 0, 3) возвращает ""

substring("12345", 1, 0 div 0) возвращает ""

substring("12345", -42, 1 div 0) возвращает "12345"

Функция string-length возвращает число символов в строке (см. [ 3.6 Строки ]). Если аргумент опущен, то по умолчанию берется узел контекста и преобразуется в строку, иными словами, берется строковое значение текущего узла контекста.

Функция normalize-space возвращает строку аргумента с нормализацией пробельных символов. Сюда входит удаление начальных и завершающих пробельных символов, а также замена оставшихся последовательностей пробельных символов одиночными пробелами. Пробельными считаются символы, являющиеся таковыми согласно сценарию S в языке XML. Если аргумент опущен, то по умолчанию в строку преобразуется узел контекста, иными словами, в качестве аргумента берется строковое значение текущего узла контекста.

Функция translate возвращает строку первого аргумента, в которой символы, указанные в строке второго аргумента, заменены символами строки третьего аргумента в соответствующей позиции. Например, translate("bar","abc","ABC") возвращает строку BAr . Если в строке второго аргумента имеется символ, для которого нет парного символа в соответствующей позиции третьей строки (поскольку строка второго аргумента длиннее строки третьего аргумента), то все экземпляры этого символа изымаются из первой строки. Например, translate("--aaa--","abc-","ABC") возвращает "AAA" . Если какой-либо символ встретился во второй строке несколько раз, то правило замены определяется первым встреченным экземпляром. Если строка третьего аргумента длиннее, чем строка второго, лишние символы игнорируются.

Замена: Функция translate не может обеспечить преобразование регистра для всех языков. Для преобразования регистра в будущих версии XPath могут появиться дополнительные функции.

4.3 Функции обработки булевых значений

число преобразуется в true тогда и только тогда, когда оно не является ни NaN, ни положительным или отрицательным нулем

набор узлов преобразуется в true тогда и только тогда, когда он непустой

строка преобразуется true тогда и только тогда, когда она имеет ненулевую длину

Функция not возвращает true тогда и только тогда, когда ее аргументом является false, и false в противном случае.

Функция true возвращает true.

Функция false возвращает false.

Функция lang возвращает true или false в зависимости от того, является ли язык узла контекста, указываемый в атрибутах xml:lang , тем же самым языком (или подмножеством языка), что указан в строке атрибута. Язык узла контекста задается значением атрибута xml:lang , указанного в этом узле, либо, если сам узел контекста не имеет атрибута xml:lang , то значением атрибута xml:lang у его ближайшего предка, имеющего такой атрибут. Если требуемый атрибут не найден, функция lang возвращает false. Если же атрибут найден, то функция lang возвращает true когда значение этого атрибута равно значению аргумента. При этом регистр игнорируется. Кроме того, если значение атрибута имеет суффикс, начинающийся с дефиса ( - ), то перед сравнением такой суффикс может быть отброшен. Например, вызов функции lang("en") возвращает true если узлом контекста является любой из пяти указанных элементов:

4.4 Функции обработки чисел

строка, образованная необязательным пробельным символом, за которым следует необязательный знак минус, Number и пробельный символ, преобразуется в число IEEE 754, ближайшее к математическому значению, представленному этой строкой (в соответствии с правилом округления IEEE 754). Любая другая строка преобразуется в NaN.

булево значение true преобразуется в 1, булево значение false преобразуется в 0

набор узлов сперва преобразуется в строку как при вызове функции string , а затем преобразуется по тому же алгоритму, что и строковый аргумент

Если аргумент отсутствует, то по умолчанию берется набор, содержащий только узел контекста.

Замечание: Функция number не должна использоваться для преобразования числовых данных, встреченных в каком-либо элементе XML документа, если не известно, что элемент данного типа представляет числовые данные в независимом от языка формате (обычно перед показом пользователю такой элемент переводятся в формат, соответствующий языку). Кроме того, функция number не может использоваться, если независимый от языка формат элемента не соответствует синтаксису XPath для Number.

Функция sum возвращает сумму всех узлов из набора, указанного в аргументе. Перед суммированием строковые значения узлов преобразуются в числа.

Функция floor возвращает наибольшее число (ближайшее к положительной бесконечности), которое не превышает значение представленного аргумента и является целым.

Функция ceiling возвращает наименьшее число (ближайшее в отрицательной бесконечности), которое не меньше значения представленного аргумента и является целым.

Функция round возвращает целое число, ближайшее к значению аргумента. Если таких чисел два, то возвращается то из них, которое ближе к положительной бесконечности. Если аргументом является NaN, функция возвращает NaN. Если аргументом является положительная бесконечность, возвращается положительная бесконечность. Если аргументом является отрицательная бесконечность, возвращается отрицательная бесконечность. Если аргументом является положительный нуль, функция возвращает положительный нуль. Если аргументом является отрицательный нуль, функция возвращает отрицательный нуль. Если аргумент меньше нуля, но больше или равен -0.5, возвращается отрицательный нуль.

Я собираюсь преобразовать XML в JSON, как описано здесь . Мне нужно передать этому методу строку, и я не могу понять, как преобразовать мой результат XPath в строку.

Я пытаюсь извлечь все дочерние элементы определенного родительского элемента [name=bar] из файла XML, который отформатирован следующим образом:

Я могу получить доступ к нужному узлу:

Я хотел бы преобразовать результат в строку:

Любая помощь будет оценена по достоинству.

1 ответ

Я пытаюсь разобрать канал xml, используя xpath. Лента содержит категории, которые выглядят следующим образом: <categories> <category 6</category> <category 12</category> <category 19</category>.

Мы хотим получить строку / столбец результата запроса xpath в pugixml : pugi::xpath_query query_child(query_str); std::string value = Convert::toString(query_child.evaluate_string(root_node)); Мы можем получить смещение, но не строку / столбец : unsigned int = query_child.result().offset; Если мы.

Вы можете просмотреть результаты XPath, а затем использовать asXML() для сохранения узла в переменной в виде строки:

Похожие вопросы:

Есть ли простой способ преобразовать запрос XPath (как строку), например: my/x/path[contains(sub/path, 'text')] к запросу XPath, который использует equals вместо contains ? Таким образом, я могу.

if($xmlobj = simplexml_load_string(file_get_contents($xml_feed))) < $result = $xmlobj->xpath(TrafficMeta); >Приведенный выше код возвращает желаемый результат, и при просмотре с помощью print_r.

Я пытаюсь разобрать канал xml, используя xpath. Лента содержит категории, которые выглядят следующим образом: <categories> <category 6</category> <category.

Мы хотим получить строку / столбец результата запроса xpath в pugixml : pugi::xpath_query query_child(query_str); std::string value = Convert::toString(query_child.evaluate_string(root_node)); Мы.

Я устанавливаю заголовок с помощью выражения xpath() . Однако xpath() возвращает NodeSet . В моем случае xpath(//base/@href) возвращает строку. Я хотел бы преобразовать результат xpath в строку. Как.

У меня есть эта строка: 8.1161E-002 Эта строка на самом деле является результатом вычисления (к сожалению, результат преобразуется в строку, и я не могу ее изменить). Так как же я могу преобразовать.

Я извлек строку внутри круглой скобки, используя простое выражение RegExp. Я пытаюсь разделить результат на массив. Но я получаю Cannot read property 'split' of null ERROR . Что странно, потому что.

Я пытаюсь объединить строку с целым числом, преобразованным в строку, и записать результат в файл. Есть мой код (упрощенный): char * convert_int_string(int val) < char * str =.

В XSLT доступны следующие функции XPath для работы со строками:

• concat(string string1, string string2. ). Возвращает конкатенацию (объединение) всех переданных ей строк;

• contains(string string1, string string2). Возвращает истину, если первая строка содержит (contains) вторую строку;

• normalize-space(string string1). Возвращает строку string1 (или контекстный узел, если строки string1 нет) после отбрасывания лидирующих и завершающих символов-разделителей и замены нескольких последовательных разделителей на один пробел;

• starts-with(string string1, string string2). Возвращает истину, если первая строка начинается (starts with) со второй подстроки;

• string(object). Преобразует объект в строку;

• string-length(string string1). Возвращает количество символов в строке string1;

• substring(string string1, number offset, number length). Возвращает length символов из строки, начиная со смещения offset;

• substring-after(string string1, string string2). Возвращает часть строки string1 после первого вхождения string2;

• substring-before(string string1, string string2). Возвращает часть строки string1 вплоть до первого вхождения строки string2;

• translate(string string1, string string2, string string3). Возвращает строку string1, в которой все вхождения символов в строке string2 заменены на соответствующие символы в строке string3;

В последующих разделах я рассмотрю каждую из этих функций.

Функции XPath для работы с наборами узлов

Функции XPath для работы с наборами узлов Следующие функции XPath работают с наборами узлов:• count(node-set). Возвращает число узлов в наборе узлов;• id(string ID). Возвращает набор узлов элемента, ID которого совпадает с переданной функции строкой, или пустой набор узлов, если таковых

Функции XPath для работы с числами

Функции XPath для работы с числами В XPath имеются следующие функции для работы с числами:• ceiling(). Возвращает наименьшее целое, большее переданного функции числа,• floor(). Возвращает наибольшее целое, меньшее переданного функции числа;• number(). Приводит переданный ей параметр к

Логические функции XPath

Логические функции XPath XPath также поддерживает следующий набор логических функций:• boolean(). Приводит аргумент к логическому значению;• false(). Возвращает false (ложь);• lang(). Проверяет, совпадает ли язык, установленный в атрибуте xml:lang, с языком, переданным в функцию;• not().

Новые функции в XSLT 2.0 и XPath 2.0

Новые функции в XSLT 2.0 и XPath 2.0 В XSLT 2.0 и XPath 2.0 планируется включить весьма много функций. В частности, для XSLT 2.0 внесены в план следующие положения:• должны быть включены функции, которые могут работать с QName, для того, чтобы можно было применить объявления пространств имен из

Функции для работы с массивами

Функции для работы с массивами В табл. П2.17 приведены функции, с помощью которых можно создавать новые массивы и получать сведения об уже имеющихся.Таблица П2.17. Функции для работы с массивами Функция Описание Array(arglist) Возвращает значение типа Variant, которое является

23.2.2. Функции для работы с памятью

23.2.2. Функции для работы с памятью Функции для работы с памятью библиотеки Glib выполняют те же действия, что и соответствующие им функции языка С. Вот их прототипы:gpointer g_malloc(gulong size);gpointer g_realloc(gpointer mem, gulong size);void g_free(gpointer

3.3. Тонкости работы со строками

3.3. Тонкости работы со строками В этом разделе мы рассмотрим некоторые тонкости работы со строками, которые позволяют лучше понять, какой код генерирует компилятор при некоторых, казалось бы, элементарных действиях. Не все приведенные здесь примеры работают не так, как

13. Символьные строки и функции над строками

13. Символьные строки и функции над строками СИМВОЛЬНЫЕ CTРOKИИНИЦИАЛИЗАЦИЯ СИМВОЛЬНЫХ СТРОКВВОД-ВЫВОД СТРОКИСПОЛЬЗОВАНИЕ ФУНКЦИЙ, РАБОТАЮЩИХ CO CТРОKAMИАРГУМЕНТЫ КОМАНДНЫХ

ФУНКЦИИ, РАБОТАЮЩИЕ СО СТРОКАМИ

ФУНКЦИИ, РАБОТАЮЩИЕ СО СТРОКАМИ Большинство библиотек языка Си снабжено функциями, работающими со строками. Рассмотрим четыре наиболее полезных и распространенных: strlen( ), strcat( ), strcmp( ) и strcpy( ). Мы уже применяли функцию strlen( ), которая находит длину строки.

Подпрограммы для работы с символами и строками

Подпрограммы для работы с символами и строками function Chr(a: byte): char; Преобразует код в символ в кодировке Windows function ChrUnicode(a: word): char; Преобразует код в символ в кодировке Unicode function OrdUnicode(a: char): word; Преобразует символ в код в кодировке Unicode function UpperCase(ch: char): char;

Следующие примеры показывают, как явные функции преобразования указываются в запросах XPath. В данных примерах запросы XPath определены в соответствии со схемой сопоставления, которая содержится в файле SampleSchema1.xml. Дополнительные сведения об этом образце схемы см. в разделе Пример схемы XSD с заметками для XPath-примеров (SQLXML 4,0).

Примеры

A. Используйте функцию явного преобразования number()

Функция Number () Преобразует аргумент в число.

Если значение параметра ContactID не является числовым, следующий запрос преобразует идентификатор ContactID в число и сравнивает его со значением 4. Затем запрос возвращает все <Employee> дочерние элементы узла контекста с атрибутом ContactID , имеющим числовое значение 4:

Можно указать ярлык оси атрибута (@), а так как дочерняя ось является значением по умолчанию, ее можно опустить в запросе:

В реляционных терминах запрос возвращает сотрудника с параметром ContactID , равным 4.

Проверка запроса XPath к схеме сопоставления

Скопируйте пример кода схемы и вставьте его в текстовый файл. Сохраните файл с именем SampleSchema1.xml.

Создайте следующий шаблон (ExplicitConversionA.xml) и сохраните его в каталоге, в котором сохранен файл SampleSchema1.xml.

Путь к каталогу схемы сопоставления (файл SampleSchema1.xml) задается относительно каталога, в котором сохранен шаблон. Можно также задать абсолютный путь, например:

Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.

Результирующий набор для выполнения этого шаблона:

Б. Используйте функцию явного преобразования string()

Функция String () Преобразует аргумент в строку.

Следующий запрос преобразует ContactID в строку и сравнивает его со строковым значением "4". Запрос возвращает все <Employee> дочерние элементы узла контекста с параметром ContactID со строковым значением "4":

Можно указать ярлык оси атрибута (@), а так как дочерняя ось является значением по умолчанию, ее можно опустить в запросе:

С функциональной точки зрения этот запрос возвращает те же результаты, что и предыдущий пример запроса, хотя выполняется сопоставление со строковым значением, а не числовым значением (то есть числом 4).

Проверка запроса XPath к схеме сопоставления

Скопируйте пример кода схемы и вставьте его в текстовый файл. Сохраните файл с именем SampleSchema1.xml.

Создайте следующий шаблон (ExplicitConversionB.xml) и сохраните его в каталоге, в котором сохранен файл SampleSchema1.xml.

Путь к каталогу схемы сопоставления (файл SampleSchema1.xml) задается относительно каталога, в котором сохранен шаблон. Можно также задать абсолютный путь, например:

Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.

Далее приведен результирующий набор, полученный в результате выполнения этого шаблона.

Сканер Python (7) модуль lxml + извлечение данных lxml (строка xml / html файл-преобразование-элемент-строка-преобразование объекта) вызов метода XPath для фильтрации данных + регистр (гребешок, крутая собака, облачная музыка Netease)

Знание сканера: процесс сканирования веб-сайта

  1. Определите, какой URL-адрес веб-сайта является источником данных.
  2. Кратко проанализируйте структуру веб-сайта, чтобы увидеть, где обычно размещаются данные.
  3. Проверьте, есть ли пейджинг, и решите проблему с пейджингом.
  4. Отправьте запрос, чтобы узнать, есть ли в response.text желаемое содержимое данных.
  5. Если есть данные, используйте соответствующий метод извлечения данных, чтобы извлечь данные и сохранить их.

Примечание: 1. Просто запустите проект краулера, не используйте для этого классы, просто обратите внимание на решение таких проблем, как источник данных, не обращайте внимания на дизайн структуры классов.

Каталог статей

1. Введение и установка lxml

Вступление: lxml - это парсер HTML / XML,Основная функция - как анализировать и извлекать данные HTML / XML.

Как и обычный, lxml также реализован на языке C. Это высокопроизводительный синтаксический анализатор HTML / XML Python.Мы можем использовать синтаксис XPath, который мы изучили ранее, чтобы быстро находить определенные элементы и информацию об узлах.

Необходимо установить языковую библиотеку C, вы можете использовать pip для установки: pip install lxml (или установить через колесо)

Здесь мы используем компилятор Anaconda, устанавливать не нужно.

2. Предварительное использование lxml

Мы используем его для парсинга HTML-кода

1. Пакет путеводителей

2. Метод преобразования xml в объект элемента

(1) Метод синтаксического анализа содержимого xml в форме строки в объект элемента, который может вызывать синтаксис xpath.

  • формат:
  • метод: etree.HTML (строка xml) Анализируемый объект элемента находится в формате html


Дело: Возвращаемое значение --------------> объект элемента


etree.HTML () может помочь нам заполнить теги

Резюме: lxml может автоматически исправлять html-код

3. Метод преобразования html файла в объект элемента.


  • формат:
  • метод: Элемент, анализируемый etree.parse («файл html»), имеет формат xml, поэтому обратите внимание на соответствие между заголовком и концом тега.
  • Дело:

    Примечание. Для чтения данных из файла его содержимое должно соответствовать формату xml. Если тег отсутствует, его нельзя будет прочитать в обычном режиме.

4. Как преобразовать объект элемента в строку


Не декодирует байты типа:


Пример: .decode («utf-8») написан в скобках (теги html добавляться не будут).


Пример: .decode (‘utf-8’) пишется вне скобок (добавьте теги html).

Через модуль lxml вы можете использовать синтаксис xpath для фильтрации элементов (заимствуя объект элемента, возвращаемый модулем lxml)

1. Используйте синтаксис xpath для фильтрации элементов

Элемент возвращаемого значения также может продолжать вызывать метод xpath, чтобы продолжить фильтрацию элементов;

объект элемента. Метод xpath () возвращает список;

формат:

  • Случай: добавить xpath к фильтрующим элементам




2. Примеры различных способов фильтрующих элементов.

Обратите особое внимание на эту строку кодов! ! ! ! ! ! ! ! !

1. Пример: запомните словарный запас питона в словах морского гребешка.


Сканировать контент

Примечание: реализация пейджинга

Код

Написание обычных функций

2. Кейс: получить информацию об исполнителе музыки Netease Cloud Music


Содержание страницы

Примечание. На странице рекомендаций нет A, B, C и т. Д., И данные дублируются. Популярность не соответствует нашему методу обработки большей части данных, мы можем удалить ее.

Читайте также: