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

LINQtoXMLを使用してみてください。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 に答える