如何在xml中使用getelementbyid进行搜索

时间:2012-09-05 06:46:55

标签: c# xml

我想使用GetElementId搜索XML。

我有一个XML文件,其中包含与每个元素相关联的属性。元素名称可能会延迟,但每个元素都有唯一的ID。

例如:

<root>
<secondRoot>
  <Person UniqueID='A112' Name='Fred'><FeMale>I am Female</FeMale></Person>

  <Person UniqueID='A111'><Male>I am male</Male></Person>
  <Person SSN='A222' Name='Tom'/>
  <Customer id='A111'/>
  <Customer id='A222334444'/>
  <Team members='A222334444 A333445555'/>
  <Random/>
</secondRoot>
</root>

在上面的XML中,我有与几个元素相关联的UniqueID属性。我想搜索具有UniqueID属性的元素。虽然我尝试使用以下DTD是不够的。

<!DOCTYPE root [
  <!ELEMENT root ANY> 

  <!ATTLIST Person UniqueID ID #REQUIRED>
  ]>

问题是UniqueID可能出现在几个元素属性列表中。 我需要避免一种情况,我必须声明DTD中具有UniqueID属性的每个元素的出现。

任何人都可以提出任何想法吗?

由于

1 个答案:

答案 0 :(得分:1)

尝试使用LINQ to XML,不需要DTD。

// XML data
var xml = "<root><secondRoot><Person UniqueID='A112' Name='Fred'><FeMale>I am Female</FeMale></Person><Person UniqueID='A111'><Male>I am male</Male></Person>  <Person SSN='A222' Name='Tom'/>  <Customer id='A111'/>  <Customer id='A222334444'/>  <Team members='A222334444 A333445555'/>  <Random/></secondRoot></root>";

var doc = XDocument.Parse(xml);

// Get all nodes that have UniqueID
var nodes = 
    from element in doc.Descendants()
    where element.Attribute("UniqueID") != null
    select element;

nodes列表将包含具有UniqueID属性的所有节点。