【发布时间】:2013-02-01 07:56:05
【问题描述】:
当我尝试使用XPath 时,我在使用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、/Menu/MenuItem)时,菜单控件会在设计时显示 There was an error rendering the control,但在运行时不会显示任何内容。
我尝试在 XSD 定义中使用属性 ref。它没有帮助我。
怎么了?提前感谢您的回答
【问题讨论】:
-
XPath 的行为与您的 XSD 无关。您的 XML 使用命名空间。您确定不需要在 XPath 中使用名称空间前缀吗?
/m:Menu,//m:MenuItem. -
您根据行为(事物在运行时显示或不显示)来描述您的问题,但 XML、XSD 和 XPath 都没有指定行为;它们都是纯粹的声明性的。那么,如果您说明您在什么环境中工作以及涉及什么 XPath 解释器,它可能会有所帮助。 (也就是说,JLRishe 几乎可以肯定地发现了问题:您的 XPath 表达式不匹配,因为它们没有引用您的 XML 元素正在使用的命名空间中的元素。)