2011-12-16 84 views
2

我必須使用XML架構來驗證包含嵌入式XML的XML文件。內部XML的正確性並不令我感興趣。我應該在XML Schema中爲這種類型的內容使用哪種類型?簡單xs:string不起作用。在XMLSchema中定義嵌入式XML

+0

你使用`XS遇到了什麼問題:string`? – 2011-12-16 14:23:18

+0

.net驗證程序很聰明,並認識到內容是xml - 我得到錯誤:「元素'xxx'不能包含子元素'yyy',因爲父元素的內容模型僅爲文本。」 – 0xddr 2011-12-20 11:29:15

回答

1

在另一個XML文檔中嵌入XML有許多選擇。

xs:any:

你可以在你的架構(link)使用xs:any類型。但是,您需要包含嵌入式XML的架構(將用於驗證它)。

或者,xs:string可以工作,如果您將內部XML嵌入CDATA部分或轉義所有<&字符。

CDATA部分:

<InnerXml> 
    <![CDATA[ 
    <InnerXmlRoot> 
     <InnerXmlContent>One & Two</InnerXmlContent> 
    </InnerXmlRoot> 
    ]]> 
</InnerXml> 

你需要小心的用這種方法唯一的事情是內部XML不能包含CDATA部分作爲允許的內容不能包含]]>(見XML specification)。

字符轉義:

<InnerXml> 
    &lt;InnerXmlRoot> 
    &lt;InnerXmlContent>One &amp; Two&lt;/InnerXmlContent> 
    &lt;/InnerXmlRoot> 
</InnerXml>