Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 使用XPath构建具有递归元素的分层菜单_Xml_Xpath_Xsd - Fatal编程技术网

Xml 使用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

在尝试使用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
/MenuItem
),菜单控件在设计时
中显示,呈现控件时出错,在运行时不显示任何内容

我尝试在XSD定义中使用属性
ref
。这对我没有帮助


怎么了?提前感谢您的回答

我的XML真正的问题不在于递归。递归工作得很好。问题在于名称空间。根据JLRishe的评论,增加名称空间是解决这个问题的一个好办法。(我的菜单开始正常工作,应该是XPath=“/*”)。谢谢

XPath的行为与XSD无关。XML使用名称空间。您确定不需要在XPath中使用名称空间前缀吗
/m:Menu
/m:MenuItem
。您可以用行为(运行时显示或不显示的内容)来描述问题,但XML、XSD和XPath都没有指定行为;它们都是纯声明性的。那么,如果您说出您在什么环境中工作以及涉及到什么XPath解释器,可能会有所帮助。(这就是说,JLRishe几乎肯定已经发现了问题:XPath表达式不匹配,因为它们没有引用XML元素正在使用的名称空间中的元素。)