Писали ли CocoaPods какие-либо предупреждения из-за установки модулей? Я исправил подобную проблему, установив OTHER_LDFLAGS
настройки сборки на $(inherited)
.
Как правило, вам следует избегать использования //
там, где это возможно. Я бы подумал о перефразировании:
//object[../properties/@refObjectId=@objectId]
В предоставленном выражении ваш вложенный предикат фактически проверяет
//properties/@refObjectId=//properties/@objectId
, из которых нет ни одного.
Надеюсь, это поможет!
РЕДАКТИРОВАТЬ: Поскольку вопрос был обновлен здесь это обновленный ответ: Вы добавили: «Кажется, что @objectId во вложенном предикате не относится к атрибуту objectId узла объекта». Ты совершенно прав! Так что давайте исправим !!
//object[../properties[not(@refPropertyId)]/@refObjectId=@objectId]
Это должно быть ближе к тому, что вам нужно!
Попробуйте следующее:
//objects[object/@objectId = properties/@refObjectId]/object
Предполагая, что все
узлы, принадлежащие данному <объекту>
, на самом деле следуют этому объекту (введенные вами похоже, это подразумевает), вы могли бы сделать:
/objects/properties[
@refObjectId = preceding-sibling::object[1]/@objectId
and
not(@refPropertyId)
]/preceding-sibling::object[1]
Это должно работать очень хорошо.
Если вы работаете в XSLT, все становится намного проще:
<xsl:key name="kPropertiesByObjectId" match="properties" use="@refObjectId" />
и
<xsl:template match="object">
<!-- This tests for an empty node-set. Non-empty node sets can only happen
for objects with at least one <properties> node without @refPropertyId -->
<xsl:if test="key('kPropertiesByObjectId', @objectId)[not(@refPropertyId)]">
<xsl:copy-of select="." />
</xsl:if>
</xsl:template>
В случае XSLT порядок узлов объекта и свойств становится неактуальным.
Это должно сработать:
//objects/object[@objectId = ../properties/@refObjectId]
Я не уверен, каков ваш xml. Однако, если он имеет следующий формат:
<objects>
<object objectId="1111" />
<properties refObjectId="1111" />
<object objectId="2111" />
<properties refObjectId="3111" />
<object objectId="4111" />
<properties refObjectId="5111" />
<object objectId="6111" />
<properties refObjectId="4111" />
<object objectId="7111" />
<properties refObjectId="7111" />
</objects>
Тогда вы должны использовать следующий xpath для получения только объектов 1111 и 7111. Результат не должен включать 4111, потому что свойства, где refObjectId = 4111, не следует сразу за объектом, у которого objectId = 4111.
//objects/properties[@refObjectId = preceding::object[1]/@objectId]/preceding::object[1]