我正在尝试检查此XML文件中的所有 partNumber 元素是否具有唯一值:
<?xml version="1.0" encoding="UTF-8"?>
<plfBlocks xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../schema/plf_blocks.xsd">
<plfPart>
<partName>Screw</partName>
<plfPart>
<partName>Philipshead</partName>
<plfPart>
<partName>A</partName>
<partNumber>01234</partNumber>
<partNumber>01235</partNumber>
<partNumber>01236</partNumber>
</plfPart>
<plfPart>
<partName>B</partName>
<partNumber>01244</partNumber>
<partNumber>01256</partNumber>
<partNumber>01234</partNumber>
</plfPart>
</plfPart>
</plfPart>
<plfPart>
<partName>Nail</partName>
<partNumber>010101</partNumber>
</plfPart>
</plfBlocks>
这是我的架构文件:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="plfBlocks">
<xs:complexType>
<xs:sequence>
<xs:element name="plfPart" type="plfPartType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="uniqueParts">
<xs:selector xpath="partNumber"/>
<xs:field xpath="text"/>
</xs:unique>
</xs:element>
<xs:complexType name="plfPartType">
<xs:sequence>
<xs:element name="partName" type="xs:string"/>
<xs:choice>
<xs:element maxOccurs="unbounded" name="partNumber" type="xs:string"/>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="plfPart" type="plfPartType"/>
</xs:sequence>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:schema>
即使一个partNumber重复,上面的xml代码也会验证。我在xs:unique中为xpath表达式尝试了不同的版本。 &#34; // PARTNUMBER&#34;似乎不受XML Schema的支持。将&#34; partNumber&#34;检查所有出现的情况?
这看起来很基本,但我该如何让它发挥作用?
这是我在迈克尔的帮助下得出的解决方案以及一些进一步的实验:
<xs:unique name="uniqueParts">
<xs:selector xpath=".//partNumber"/>
<xs:field xpath="."/>
</xs:unique>
答案 0 :(得分:0)
使用<xs:selector xpath=".//partNumber"/>