我正在开发一个插入另一个项目的项目。我正在插入的项目产生了一种奇怪的XML语法,无法更改。
它有一个奇怪的元素,以说明
<DocumentRoot>
<Parent>
<Child-Which-Can-Occur-Random-Number-Of-Times> Data </Child-Which-Can-Occur-Random-Number-Of-Times>
<Weird-Elt_12309843028938> Data I need </Weird-Elt_12309843028938>
<Weird-Elt_84509843323232> Data I need </Weird-Elt_84509843323232>
</Parent>
<Parent>
<Child-Which-Can-Occur-Random-Number-Of-Times> Data </Child-Which-Can-Occur-Random-Number-Of-Times>
<Weird-Elt_12309843028938> Data I need </Weird-Elt_12309843028938>
</Parent>
<Parent>
<Child-Which-Can-Occur-Random-Number-Of-Times> Data </Child-Which-Can-Occur-Random-Number-Of-Times>
<Weird-Elt_12309843028938> Data I need </Weird-Elt_12309843028938>
</Parent>
</DocumentRoot>
我需要什么:“Weird-Elt”标签的名称及其内容。
问题:无法更改XML。奇怪的Elt元素可以随机出现次数,就像它上面的元素Child-Which-Can-Occur-Random-Number-Of-Times
一样。
我能看到的唯一解决方案是将Linq to XML与正则表达式结合使用以匹配Weird-Elt的名称。
我是对的吗?
答案 0 :(得分:4)
var nodeList = xmlDoc.DocumentElement.SelectNodes("//*[starts-with(name(),'Weird-Elt_')]");
如果名称并不总是以Weird-Elt_开头,请尝试contains
var nodeList = xmlDoc.DocumentElement.SelectNodes("//*[contains(name(),'Weird-Elt_')]");
答案 1 :(得分:3)
是的,你是对的。您必须使用Linq to SQL和RegularExpression。这是样本
Regex regEx = new Regex("Weird-Elt_.*", RegexOptions.Compiled);
XDocument doc = XDocument.Parse(xml1);
var x1 = from e in doc.Descendants("Parent").Descendants()
where regEx.IsMatch(e.Name.LocalName)
select e;
希望它有所帮助。