Я хочу проверить, существует ли дочерний элемент с определенным атрибутом.XSD утверждают, что существуют определенные дочерние элементы
E.g.
<?xml version="1.0" encoding="UTF-8"?>
<mc:PropertyGroupStructure xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
xmlns:mc="de.mycompany.propertygroupstructure"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="de.mycompany.propertygroupstructure file:PGroupStructure.xsd">
<mc:Property id="awesome" rename="Awesome Renaming" />
<mc:Category name="Common">
<mc:Property id="Note"/>
<mc:Property id="Other" />
</mc:Category>
<mc:Property id="aaa"></pc:Property>
</mc:PropertyGroupStructure>
XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" elementFormDefault="qualified"
vc:minVersion="1.1" targetNamespace="de.mycompany.propertygroupstructure"
xmlns="de.mycompany.propertygroupstructure">
<xs:element name="PropertyGroupStructure" type="PropertyGroupStructureType">
<xs:unique name="UniqueId">
<xs:selector xpath="./* | ./*/*"/>
<xs:field xpath="@id"/>
</xs:unique>
</xs:element>
<xs:complexType name="PropertyGroupStructureType">
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element maxOccurs="unbounded" minOccurs="0" name="Property" type="PropertyType"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="Category" type="CategoryType"/>
</xs:choice>
<xs:assert test="Property[@id eq 'awesome']" />
</xs:complexType>
<xs:complexType name="PropertyType">
<xs:attribute name="id" type="xs:string" use="required"/>
<xs:attribute name="rename" type="xs:string" />
<xs:assert test="(@id ne 'awesome') or
(@id eq 'awesome' and exists(@rename) and (@rename eq 'Awesome Renaming')) />
</xs:complexType>
<xs:complexType name="CategoryType">
<xs:sequence>
<xs:element name="Property" type="PropertyType" maxOccurs="unbounded" minOccurs="1"/>
</xs:sequence>
<xs:attribute name="name" use="required"/>
</xs:complexType>
</xs:schema>
Но Xerces всегда говорит мне "Утверждение не удалось".
Возможно, синтаксис XPath неверен?
Редактировать: Я заменил оригинальный упрощенный пример на полный.
Спасибо! Это не работает. Я отредактировал свой OP и заменил упрощенный пример на полный. Он все еще не работает. Вы знаете, что я делаю неправильно здесь? – Catscratch
Хм, может быть, какой-нибудь совет? :-) Благодаря! – Catscratch
Теперь ваш XML имеет 'rename =" Awesome Rename "', но ваш XSD утверждает 'rename =" Awesome Renaming "'. Отдельно ваше утверждение также может быть упрощено с использованием базовой булевой алгебры. – kjhughes