Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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
C# 如何在XML结构中导航所有子标记_C#_Xml_Linq_Xpath - Fatal编程技术网

C# 如何在XML结构中导航所有子标记

C# 如何在XML结构中导航所有子标记,c#,xml,linq,xpath,C#,Xml,Linq,Xpath,我有以下xml: <VON> <OverXP name="UML1" > <Property name="actor1" value="1" /> <OverXP name="UML2" > <Property name="actor2" value="2" /> </OverXP>

我有以下xml:

   <VON>
        <OverXP name="UML1"  >
            <Property name="actor1" value="1"  />
            <OverXP name="UML2"  >
                <Property name="actor2" value="2"  />      
            </OverXP>  
        </OverXP>
    </VON>

但是不起作用

您正在@name/string中的属性值上检查字符串节点,这是不正确的,无法执行。在XPATH中,您不需要像在面向对象代码中那样显式地声明类型,只需要在C层中处理其类型的结果值。字符串用于仅返回所需结果的字符值

因此,使用类似于//OverXP[@name='UML2']

但从所需结果的外观来看,您可能希望使用如下内容: //过度经验[contains@name,'UML']但这将不止一次地为您提供一些结果,因此您可以将[1]附加到查询中,或对其进行细化,使其更符合您希望看到的内容。

以下是一个使用LINQ查询语法的查询,我相信它将获得您想要的结果:

XDocument document=XDocument.ParsexmlContent; 变量查询= 从中的财产 document.genderantsoverxp.element属性 选择新的 { 级别=property.concedens.Count-1, Actor=stringproperty.Attributename, Value=stringproperty.Attributevalue }; 我已将您的示例数据和此查询合并到演示程序中。请参阅下面的演示程序的格式化输出以及程序本身

预期产量

[级别1]=>[actor1=1] [级别2]=>[actor2=2] 示范项目

使用制度; 使用System.Linq; 使用System.Xml; 使用System.Xml.Linq; 类LinqToXmlDemo { 静态公共字符串[]args { var xmlContent=GetXml; XDocument document=XDocument.ParsexmlContent; 变量查询= 从中的财产 document.genderantsoverxp.element属性 选择新的 { 级别=property.concedens.Count-1, Actor=stringproperty.Attributename, Value=stringproperty.Attributevalue }; 查询中的foreach var项 { Console.WriteLine[Level{0}]=>[{1}={2}], item.Level、item.Actor、item.Value; } } 静态字符串GetXml { 回来 @ ; } }
我在XML中看不到Overview元素…我需要获取所有的孩子这可以获取所有的孩子,你试过了吗?我不太确定level1:actor1=1 level2:actor2=2返回的结果是什么,XPath返回XML片段或其中的值。如果您能提供一个您所关注的XML部分的示例,我可以更新我的答案。
XPathNavigator nav;
XPathDocument docNav;
XPathNodeIterator NodeIter;
String strExpression;
// Open the XML.
docNav = new XPathDocument(@"C:\uml.xml");
 // Create a navigator to query with XPath.
 nav = docNav.CreateNavigator();
strExpression = "//OverXP//*";
NodeIter = nav.Select(strExpression);