C# 如何在XML结构中导航所有子标记
我有以下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>
<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);