3

我想使用 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 属性的元素。

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

谢谢

4

1 回答 1

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 属性的节点。

于 2012-12-21T08:41:21.847 回答