2012-09-05 78 views
3

我想使用GetElementId搜索XML。如何在xml中使用getelementid进行搜索

我有一个属性与每个元素相关联的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

“UniqueID可能出现在几个元素中” - 然后提供更好的样本。 –

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