Xml 使用XPath构建具有递归元素的分层菜单
在尝试使用XPath时,使用Xml 使用XPath构建具有递归元素的分层菜单,xml,xpath,xsd,Xml,Xpath,Xsd,在尝试使用XPath时,使用XMLDataSource构建递归菜单时遇到问题。当XPath=”“时,菜单工作正常,显示根元素及其下的所有层次结构。但我需要菜单至少从第二层次开始。 XML架构文件包含以下定义: <xs:element name="Menu" type="TopMenuType"/> <xs:element name="MenuItem" type="TopMenuItemType"/> <xs:complexType name="TopMenuIt
XMLDataSource
构建递归菜单时遇到问题。当XPath=”“
时,菜单工作正常,显示根元素及其下的所有层次结构。但我需要菜单至少从第二层次开始。
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
,/MenuItem
),菜单控件在设计时中显示,呈现控件时出错,在运行时不显示任何内容
我尝试在XSD定义中使用属性ref
。这对我没有帮助
怎么了?提前感谢您的回答我的XML真正的问题不在于递归。递归工作得很好。问题在于名称空间。根据JLRishe的评论,增加名称空间是解决这个问题的一个好办法。(我的菜单开始正常工作,应该是XPath=“/*”)。谢谢 XPath的行为与XSD无关。XML使用名称空间。您确定不需要在XPath中使用名称空间前缀吗/m:Menu
,/m:MenuItem
。您可以用行为(运行时显示或不显示的内容)来描述问题,但XML、XSD和XPath都没有指定行为;它们都是纯声明性的。那么,如果您说出您在什么环境中工作以及涉及到什么XPath解释器,可能会有所帮助。(这就是说,JLRishe几乎肯定已经发现了问题:XPath表达式不匹配,因为它们没有引用XML元素正在使用的名称空间中的元素。)