我正在尝试找到一种将xml数据解析为SQL表的有效方法。
这是我将获得的XML的一个小例子,实际上在属性标记内将有大约20-25个标记和数百个条目。
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry m:etag="W/"28"">
<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/"28"">
<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”
非常感谢任何帮助。
答案 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