Работа с XPath-подобными объектными запросов

Работа с XPath-подобными объектными запросов

Используя Aspose.3D for Python via .NET, вы можете выбрать один или несколько объектов в текущем узле с помощью синтаксиса запроса XPath-Like. Синтаксис запроса был вдохновлен XPath, поэтому большинство концепций и синтаксиса похожи, синтаксис запроса совместим с URL, поэтому он будет использоваться в нашей облачной версии в будущем. Как правило, синтаксис состоит изУсловие имени префикса / Имя Состояние /.

Префикс = Описание =
// Глобальный селектор, любой потомок рассматривается как корневой узел для выполнения выбора
/ Корневой селектор, только один предок используется для поиска
Другие Предположим, что это имя, и выберите объект по имени в глобальном режиме селектора
Имя-это строка, которая соответствует имени объекта, или подстановочный знак * используется для сопоставления любого имени. Условие является выражением, определяющим, следует ли выбирать объект, поддерживаются логические операторы (не) и/или операторы сравнения >/</>=/<=/=/!=. Для доступа к свойству в выражении условия используется префикс ‘@’, например, @Name будет читать свойство Name. Синтаксис ярлыка для тестируемого типа поддерживается <Mesh>, это эквивалентно [@Type = 'Mesh'], идентификаторы без кавычки будут рассматриваться как строка.

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

 //<Node>

Это короткий синтаксис:

 //*[<Node>]

Или

 //*[@Type = Node]

Выберите узел второго уровня с видимым родителем

 //<Node>[@Visible]/<Node>

Ниже приводится пример кода для запроса одного или нескольких объектов:

from aspose.threed import Scene
from aspose.threed.entities import Camera, Light

#  For complete examples and data files, please go to https:# github.com/aspose-3d/Aspose.3D-for-.NET
# Create a scene for testing
s = Scene()
a = s.root_node.create_child_node("a")
a.create_child_node("a1")
a.create_child_node("a2")
s.root_node.create_child_node("b")
c = s.root_node.create_child_node("c")
c.create_child_node("c1").add_entity(Camera("cam"))
c.create_child_node("c2").add_entity(Light("light"))
/*The hierarchy of the scene looks like:
 - Root
    - a
        - a1
        - a2
    - b
    - c
        - c1
            - cam
        - c2
            - light
             */
# select objects that has type Camera or name is 'light' whatever it's located.
objects = s.root_node.select_objects("//*[(@Type = 'Camera') or (@Name = 'light')]")
# Select single camera object under the child nodes of node named 'c' under the root node
c1 = s.root_node.select_single_object("/c/*/<Camera>")
#  Select node named 'a1' under the root node, even if the 'a1' is not a directly child node of the
obj = s.root_node.select_single_object("a1")
# Select the node itself, since the '/' is selected directly on the root node, so the root node is selected.
obj = s.root_node.select_single_object("/")