2017-08-03 29 views
0

如何在xs:list中表示项目(如果它包含空格)?XML xs中的转义空间:列表

模式片段:

<xs:simpleType name="mylisttype"> 
    <xs:list itemType="xs:string" /> 
</xs:simpleType> 

<xs:element name="mylist" type="mylisttype" /> 

示例XML片段:

<mylist>item1 item2 item3 item4</mylist> 

输出示例:

["item1", "item2", "item3", "item4"] 

示例XML片段(不正确)

<mylist>Item One Item Two Item Three Item Four</mylist> 

所需的输出:

["Item One", "Item Two", "Item Three", "Item Four"] 

回答

0

这是规范说这是不可能的地方。

A·列表·数据类型都可以·构造·从普通的或·原始··原子·数据类型,其·词法空间·允许空白(如字符串或任何URI)或·联合·数据类型的任何其的{成员类型定义}的词法空间允许空间。由于在项目的词汇表达被映射为值之前,·列表项在空白处被分开,所以即使项目类型原则上允许,在列表项的词汇表示中也不会出现空白它。出于同样的原因,当·item类型的·value空间中给定值的每个可能的词汇表示都包含空白时,该值永远不会作为列表·数据类型的任何值中的项目出现。

W3C XML Schema Definition Language (XSD) 1.1 Part 2, Section 2.4.1.2

我还可以测试该逃逸空间作为XML实体代码&#032;也不起作用,至少在LXML(它是基于libxml2和的libxslt)后确认。

1

你不能改变的空间为成员分隔在xs:list,你不能成员串内逃生空间

将元素用于任何不适用于的复杂列表。

阅读关于XSD design rationale regarding custom list delimiters here


+0

我读过这个,我不想改变分隔符。对于我的用例'xs:list'是最合适的类型。列表中的每个字符串都是一个短的原子标识符,它可能偶尔包含来自已知集合的空格字符。 –

+0

@ BenSarahGolightly:已更新的答案清楚地表明'xs:list'中的字符串中没有空格的转义机制。使用元素代替,无需验证您的列表,或验证带外wrt XSD。 – kjhughes

+1

这应该是被接受的答案。 ty kjhughes,你救了我一些想知道的。 – user1712447