2011-09-28 122 views
0

我有一个XSD嵌入到一个XML这样的:
不区分大小写键

<Replacements> 
    <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
     <xs:element name="Replacements"> 
      <xs:complexType> 
       <xs:sequence> 
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="Replace" /> 
       </xs:sequence> 
      </xs:complexType> 
      <xs:key name="ReplaceKey"> 
       <xs:selector xpath="./Replace"/> 
       <xs:field xpath="@old"/> 
      </xs:key> 
     </xs:element> 
     <xs:element name="Replace"> 
      <xs:complexType> 
       <xs:attribute name="old" type="AnythingButLowerCase" use="required" /> 
       <xs:attribute name="new" type="xs:string" use="required" /> 
      </xs:complexType> 
     </xs:element> 
     <xs:simpleType name="AnythingButLowerCase"> 
      <xs:restriction base="xs:string"> 
       <xs:pattern value="[^a-z]+"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:schema> 
    <Replace old="A1020____9" new="A1020"/> 
    <Replace old="a1020____9" new="A1020"/> 
</Replacements> 

我使用的xs:关键定义的“老”替换元素属性的唯一键。
我的问题是我想这个密钥是不区分大小写的。
我看了这么多文件,说明我可以使用XSD功能,如大写或转化为解决这个问题,但如果我喜欢写东西

<xs:field xpath="upper-case(@old)"/> 

VS2010给了我这样一个警告:

 
'upper-case(@old)' is an invalid XPath for selector or field. 

我做错了什么?

谢谢:)

回答

0

好的!
我明白了!

不允许在xpath中使用xs:field中的函数。

什么,我正在寻求解决方法是定义一个简单类型,把一个有限制不允许小写字母。
事情是这样的:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 
<Replacements> 
    <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
     <xs:element name="Replacements"> 
      <xs:complexType> 
       <xs:sequence> 
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="Replace" /> 
       </xs:sequence> 
      </xs:complexType> 
      <xs:key name="ReplaceKey"> 
       <xs:selector xpath="./Replace"/> 
       <xs:field xpath="@old"/> 
      </xs:key> 
     </xs:element> 
     <xs:element name="Replace"> 
      <xs:complexType> 
       <xs:attribute name="old" type="AnythingButLowerCase" use="required" /> 
       <xs:attribute name="new" type="xs:string" use="required" /> 
      </xs:complexType> 
     </xs:element> 
     <xs:simpleType name="AnythingButLowerCase"> 
      <xs:restriction base="xs:string"> 
       <xs:pattern value="[^a-z]+"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:schema> 
    <Replace old="A1020____9" new="A1020"/> 
    <Replace old="a1020____9" new="A1020"/> 
</Replacements> 

现在这成为了我想要它。

1

正确的XPath函数是“大写”而不是“大写”。只需在连字符中添加即可。

+0

我使用大写,它只是在这里打错输入。但没有运气...... – Achilles