使用正则表达式解析 XML 是否合适
本文关键字:是否 XML 正则表达式 | 更新日期: 2023-09-27 18:31:29
我正在做一个插入另一个项目的项目。我正在插入的项目产生了一种无法更改的奇怪 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 的名称。
我说的对吗?
var nodeList = xmlDoc.DocumentElement.SelectNodes("//*[starts-with(name(),'Weird-Elt_')]");
如果名称并不总是以奇怪Elt_开头,请尝试contains
var nodeList = xmlDoc.DocumentElement.SelectNodes("//*[contains(name(),'Weird-Elt_')]");
是的,你是对的。您必须将 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;
希望对您有所帮助。