Работа с XPath-подобными объектными запросов
Работа с XPath-подобными объектными запросов
Используя Aspose.3D for Java, вы можете выбрать один или несколько объектов в текущем узле, используя синтаксис запроса XPath-Like. Синтаксис запроса был вдохновлен XPath, поэтому большинство концепций и синтаксиса похожи, синтаксис запроса совместим с URL, поэтому он будет использоваться в нашей облачной версии в будущем. Как правило, синтаксис состоит изУсловие имени префикса / Имя Состояние /.
| Префикс | Описание |
|---|---|
| // | Глобальный селектор, любой потомок рассматривается как корневой узел для выполнения выбора |
| / | Корневой селектор, только один предок используется для поиска |
| Другие | Предположим, что это имя, и выберите объект по имени в глобальном режиме селектора |
Имя-это строка, которая соответствует имени объекта, или подстановочный знак * используется для сопоставления любого имени. Условие является выражением, определяющим, следует ли выбирать объект, поддерживаются логические операторы (не) и/или операторы сравнения >/</>=/<=/=/!=. Для доступа к свойству в выражении условия используется префикс ‘@’, например, @Name будет читать свойство Name. Синтаксис ярлыка для тестируемого типа поддерживается <Mesh>, это эквивалентно [@Type = 'Mesh'], идентификаторы без кавычки будут рассматриваться как строка.
Выберите все узлы, используя глобальный селектор синтаксиса
//<Node>Это короткий синтаксис:
//*[<Node>]Или
//*[@Type = Node]Выберите узел второго уровня с видимым родителем
//<Node>[@Visible]/<Node>Ниже приводится пример кода для запроса одного или нескольких объектов:
// For complete examples and data files, please go to https://github.com/aspose-3d/Aspose.3D-for-Java
//Create a scene for testing
Scene s = new Scene();
// Create a child node
Node a = s.getRootNode().createChildNode("a");
// Create a sub-child node
a.createChildNode("a1");
// Create a sub-child node
a.createChildNode("a2");
// Create a child node
s.getRootNode().createChildNode("b");
// Create a child node
Node c = s.getRootNode().createChildNode("c");
// Create a sub-child node
c.createChildNode("c1").addEntity(new Camera("cam"));
// Create a sub-child node
c.createChildNode("c2").addEntity(new 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.
List<A3DObject> objects = s.getRootNode().selectObjects("//*[(@Type = 'Camera') or (@Name = 'light')]");
//Select single camera object under the child nodes of node named 'c' under the root node
A3DObject c1 = s.getRootNode().selectSingleObject("/c/*/<Camera>");
// Select node named 'a1' under the root node, even if the 'a1' is not a directly child node of the
A3DObject obj = s.getRootNode().selectSingleObject("a1");
//Select the node itself, since the '/' is selected directly on the root node, so the root node is selected.
obj = s.getRootNode().selectSingleObject("/");