0

我正在研究一个插入另一个项目的项目。我进入的项目产生了一种无法更改的奇怪 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。Weird-Elt 元素可以出现随机次数,它上面的元素也可以出现Child-Which-Can-Occur-Random-Number-Of-Times

我能看到的唯一解决方案是结合使用 Linq to XML 和正则表达式来匹配 Weird-Elt 的名称。

我是对的吗?

4

2 回答 2

4
var nodeList = xmlDoc.DocumentElement.SelectNodes("//*[starts-with(name(),'Weird-Elt_')]");

如果名称不总是以 Weird-Elt_ 开头,请尝试contains

var nodeList = xmlDoc.DocumentElement.SelectNodes("//*[contains(name(),'Weird-Elt_')]");
于 2012-04-18T17:50:59.043 回答
3

是的,你是对的。您将不得不使用带有正则表达式的 Linq to SQL。这是示例

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;

希望能帮助到你。

于 2012-04-18T17:31:18.410 回答