使用XPath构建具有递归元素的分层菜单

时间:2013-02-01 07:56:06

标签: xml xpath xsd

如果我尝试使用XMLDataSource,我在使用XPath构建递归菜单时遇到问题。当XPath=""时,Menu工作正常,显示Root元素及其下的所有层次结构。但我需要菜单至少从第二级层次结构开始。 XML模式文件包含定义:

<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)时,菜单控件会在设计时显示{{1}并且在运行时没有显示任何内容。

我尝试在XSD定义中使用属性There was an error rendering the control。它没有帮助我。

有什么问题?提前感谢您的回答

1 个答案:

答案 0 :(得分:0)

我的XML的真正问题不在于递归。递归工作正常。问题出在名称空间中。根据 JLRishe 的评论,添加命名空间是为了解决这个问题。 (我的菜单开始工作,因为它应该分配 XPath =“/ *”)。谢谢。