我想使用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属性的每个元素的出现。
任何人都可以提出任何想法吗?
由于
答案 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属性的所有节点。