2013-02-01 53 views
1

我在使用XMLDataSource構建遞歸菜單時出現問題,當我嘗試使用XPath時。當XPath=""然後菜單工作正常顯示根元素和它下面的所有層次結構。但我需要該菜單至少從第二層級開始。 XML的架構文件中包含的定義:使用XPath構建具有遞歸元素的分層菜單

<xs:element name="Menu" type="TopMenuType"/> 
<xs:element name="MenuItem" type="TopMenuItemType"/> 

<xs:complexType name="TopMenuItemType"> 
    <xs:sequence> 
     <xs:element type="TopMenuItemType" name="MenuItem" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
    <xs:attribute type="xs:string" name="Caption" default=""/> 
</xs:complexType> 

<xs:complexType name="TopMenuType"> 
    <xs:sequence> 
     <xs:element type="TopMenuItemType" name="MenuItem" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence>  
</xs:complexType> 

而且XML文件本身根據該架構包含數據:

<Menu xmlns="http://tempuri.org/TopMenuData.xsd"> 
<MenuItem Caption="Profile"> 
    <MenuItem Caption="Regulatory Transactions"></MenuItem> 
    <MenuItem Caption="Work Management"></MenuItem> 
    <MenuItem Caption="Work Queues"></MenuItem> 
</MenuItem> 
<MenuItem Caption="Message Queues" URL="MQ.aspx"> 
    <MenuItem Caption="Appointment Queues"> 
     <MenuItem Caption="Termination Queues"></MenuItem> 
     <MenuItem Caption="Filling Status"></MenuItem> 
    </MenuItem> 
</MenuItem> 

當我嘗試賦值的XPath(類似/Menu//MenuItem,/MenuItem,/Menu/MenuItem),則Menu控件在設計時顯示There was an error rendering the control,並且在運行時不顯示任何內容。

我試着在XSD定義中使用屬性ref。它並沒有幫助我。

出了什麼問題?在此先感謝您的答案

+1

XPath的行爲與您的XSD無關。您的XML使用一個名稱空間。你確定你不需要在XPath中使用命名空間前綴? '/ m:Menu','// m:MenuItem'。 – JLRishe

+0

您可以根據行爲描述問題(事情在運行時顯示或不顯示),但XML,XSD和XPath都不指定行爲;他們都是純粹的聲明。如果你說出你正在使用什麼環境以及涉及到什麼XPath解釋器,那麼這可能會有所幫助。 (也就是說,JLRishe幾乎可以肯定地發現問題:你的XPath表達式不匹配,因爲它們沒有引用XML元素使用的命名空間中的元素。) –

回答

0

我的XML的真正問題不在遞歸中。遞歸工作正常。問題在於命名空間。根據JLRishe的評論,添加名稱空間是解決這個問題的首選。 (我的菜單開始工作,因爲它應該分配XPath =「/ *」)。謝謝。