使用正则表达式解析 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 的名称。

我说的对吗?

使用正则表达式解析 XML 是否合适

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;

希望对您有所帮助。