xpath怎么写多个属性

1.xpath如何获得属性字符串比如我如何获得该实现类似于SQL的where条件方式从XML中查询出满足指定属性值的元素集合,并可通用到其它XML文档 。
平台及工具:windows7 旗舰版VS2008问题:当生成的XPath字符串包含两个字符属性条件时出现异常“具有无效标记” 。根据提供的元素属性名称数组及其对应的值数组合成XPath字符串,然后使用XPathSelectElements函数查询所有满足条件的元素集合,以下面的简单用户信息XML文档为例:[html] view plaincopy 通过以下函数查询出满足条件的元素集合:[csharp] view plaincopy/// /// 根据指定属性和值条件查找元素 /// /// 元素属性名称数组 /// 元素属性对应的值数组 /// public List FindElements(string[] columns, string[] values) { if (columns.Count() != values.Count()) { throw new Exception("条件字段数目和值数目不匹配,无法生成查询条件!"); } //循环逐个查找到满足条件的元素 StringBuilder xpath = new StringBuilder(xTableName + "["); for (short index = 0; index 0) { xpath.Append(" AND"); } xpath.Append(columns[index]); xpath.Append("="); xpath.Append("'" + values[index] + "'"); } xpath.Append("]"); //根据xpath进行查询 return xmlDB.XPathSelectElements(xpath.ToString()); } 如果是单个属性作为条件,能够正确找到需要的元素;如果为多个元素属性作为条件,而且其中包含多个字符串类型条件将产生具有无效标记的异常,跟踪xpath.ToString()生成的查询条件及其结果为:XPath字符串结果User[@ID='U001'] 成功 User[@ID='U001' AND @Age=20] 成功 User[@Age=20] 成功 User[@Age>20] 成功 User[@ID='U001' AND @UserName='Jack'] 异常 User[@ID='' AND @UserName=''] 异常 User[@ID=\"U001\" AND @UserName=\"Jack\"] 异常 User[@ID=\'U001\' AND @UserName=\'Jack\'] 异常 @"User[@ID=\'U001\' AND @UserName=\'Jack\']" 异常 为达到同样的目的只能采用折衷方式,根据提供的元素属性条件逐个提取满足条件的元素,如果数据量太大将会影响性能:[csharp] view plaincopypublic List FindElements(string[] columns, string[] values) { List nodes = null,filterNodes = null; if (columns.Count() != values.Count()) { throw new Exception("条件字段数目和值数目不匹配,无法生成查询条件!"); } //循环逐个查找到满足条件的元素 for (short index = 0; index elements = xmlTable.XPathSelectElements(xTableName + "[@" + columns[index] + "='" + value + "']"); if (elements == null || elements.Count() == 0) return null; else { nodes = elements.ToList(); elements = null; continue; } } if (nodes == null) { return null; } //按条件过滤数据 var data = http://www.xuexi88.com/zhishi/from e in nodes where e.Attribute(atrrName).Value == value select e; filterNodes = data.ToList(); if (filterNodes == null || filterNodes.Count() == 0) return null; nodes = filterNodes; } //根据xpath进行查询 if(nodes==null || nodes.Count() == 0) { return null; } else { return nodes;//.First(); } } 。
【xpath怎么写多个属性】

xpath怎么写多个属性

文章插图