如何使用c#获取XML文档的所有子标记名称?

时间:2013-10-31 12:01:56

标签: c# xml performance tags

我正在尝试找到一种将xml数据解析为SQL表的有效方法。

这是我将获得的XML的一个小例子,实际上在属性标记内将有大约20-25个标记和数百个条目。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry m:etag="W/&quot;28&quot;">
<id>114</id>
<title type="text">Title 1</title>
<updated>2012-07-09T15:02:08+01:00</updated>
<author>
  <name />
</author>
<m:properties>
  <d:ContentTypeID>456</d:ContentTypeID>
  <d:ApproverComments>Correction to Title</d:ApproverComments>
  <d:Name>bar.pdf</d:Name>
  <d:Title>Title</d:Title>
  <d:DocumentOwnerId m:type="Edm.Int32">20</d:DocumentOwnerId>
  <d:DocumentControllerId m:type="Edm.Int32" m:null="true"></d:DocumentControllerId>
</m:properties>
</entry>
<entry m:etag="W/&quot;28&quot;">
<id>115</id>
<title type="text">Title 2</title>
<updated>2012-07-09T15:05:35+01:00</updated>
<author>
  <name />
</author>
<m:properties>
  <d:ContentTypeID>456</d:ContentTypeID>
  <d:ApproverComments>Correction of Title2</d:ApproverComments>
  <d:Name>foo.pdf</d:Name>
  <d:Title>Title 2</d:Title>
  <d:DocumentOwnerId m:type="Edm.Int32">20</d:DocumentOwnerId>      
</m:properties>
</entry>

我需要查看每个“条目”并提取m:properties标记内的所有标记名称,并将它们设置为SQL表的列。

我正在寻找一种更有效的方法来实现这一点,而不是必须遍历所有条目的属性标记,然后将标记名称列表放在一起,然后我需要交叉引用以确保我得到它们。

我一直试图找到一个功能;

String TagNames = XMLDoc.getChildNode('properties').getChildNodeNames()

TagNames等于“ContentTypeID,ApproverComments,Name,Title,DocumentOwnerID,DocumentControllerID”

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

假设您已经拥有XDocument,我们将其命名为doc,一种方法可能就是这样:

doc.GetElements("entry")
   .Select(e => e.GetElement("m:properties")
                 .GetElements()
                 .Select(ce => ce.Name.LocalName)
                 .ToList())
   .ToList();

这应该为每个条目提供List<List<string>>

您甚至可以使用id的{​​{1}}限定内部列表:

entry