【问题标题】:Using XPath for building hierarchical Menu with recursive elements使用 XPath 构建带有递归元素的分层菜单
【发布时间】: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 元素正在使用的命名空间中的元素。)

标签: xml xpath xsd


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2010-10-11
    • 2013-08-04
    • 2020-01-19
    • 2013-03-21
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    相关资源
    最近更新 更多