2011-05-27 109 views
0

我需要的XML解析器/验证忽视&CDATA忽略与在XSD

我如何在XSD使用CDATA完成它的presense。

这是XSD的片段:

<xs:simpleType name="values"> 
    <xs:restriction base="xs:string"> 
    <xs:enumeration value="IN & OUT"/> 
    <xs:enumeration value="XYZ"/> 
    </xs:restriction> 
</xs:simpleType> 

我试着使用CDATA如下却徒劳无功,因为我得到XSD验证错误:

<xs:simpleType name="values"> 
    <xs:restriction base="xs:string"> 
    <xs:enumeration value="IN <![CDATA[&]]> OUT"/> 
    <xs:enumeration value="XYZ"/> 
    </xs:restriction> 
</xs:simpleType> 

任何帮助表示赞赏。

Thansk提前。

+0

为什么不使用''&? – kennytm 2011-05-27 19:21:09

+0

在属性值中使用结构内容是不可能的。除了元素之外,这也意味着您不能在属性值中包含CDATA节。 – jasso 2011-05-27 23:21:18

回答

1

我相信你可以使用实体参考&amp;而不是字符&

0

嗯。我觉得有趣的是,第二段代码中的那条线实际上是黑色的,而不是正确的彩色元素。

请问什么是验证错误?这可能有助于查明该行代码的确切错误。解析器可能会忽略&符号,但您是否尝试用'&'代替&?事情是,我有一种感觉,你设置的枚举值为

"IN <![CDATA[&]]> OUT"/> 

哪一个......显然不能通过验证。无论是该分析器还是该分析器都完全通过该行并仅将XYZ作为枚举值。

  1. 什么是错误。
  2. 你有没有试着用

    &amp; 
    

    因为它是一种逃避实体更换&?

干杯。

+0

1)XMLSPY中的验证错误 - charcter <是意想不到的。 2)我不想使用&放大器,因为它预计我们的代码更改将其转换为'AND',我们不想在我们的代码中这样做。 – joerobles 2011-05-27 19:47:32

+0

@joerobles:您的代码是否只将“&”实体引用更改为“AND”?如果是这样,你可以使用十进制引用:'&' – 2011-05-27 20:11:46

+0

啊我明白了。我会看看我能否在不影响您的需求的情况下提出解决方案。你有没有试过用google搜索错误? =) – 2011-05-27 20:11:50

1

尝试使用实体引用:

<xs:simpleType name="values"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="IN &amp; OUT"/> 
     <xs:enumeration value="XYZ"/> 
    </xs:restriction> 
    </xs:simpleType> 

或十进制参考:

<xs:simpleType name="values"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="IN &#38; OUT"/> 
     <xs:enumeration value="XYZ"/> 
    </xs:restriction> 
    </xs:simpleType>