我有一个想要转换为数据表的 LinQ XDocument(来自 SOAP 响应)。这是我正在处理的 XML。它使用名称空间使问题进一步复杂化。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getDetailsResponse xmlns:ns2="http://service.xyz.com/">
<return>
<meeting meetingCode="8">
<meetingDate>2013-07-08T00:00:00+10:00</meetingDate>
<actionList>
<actionCoOrdinator>The action man</actionCoOrdinator>
<action>
<actionType>Type1</actionType>
<actionBy>John</actionBy>
</action>
<action>
<actionType>Type2</actionType>
<actionBy>Mary</actionBy>
</action>
<action>
<actionType>Type3</actionType>
<actionBy>Phil</actionBy>
</action>
</actionList>
</meeting>
</return>
</ns2:getDetailsResponse>
</soap:Body>
</soap:Envelope>
这是 DataTable 中想要的输出
MeetingCode MeetingDate ActionCoOrdinator ActionType ActionBy ------------ ------------- -------------- --- ---------- -------- 8 2013-07-08T00:00:00+10:00 行动人 Type1 约翰 8 2013-07-08T00:00:00+10:00 动作男 Type2 Mary 8 2013-07-08T00:00:00+10:00 行动人 Type3 Phil
如您所见,我希望“actionList”中的每个“action”元素都有一行,但对于每一行,我还需要来自父/祖父元素的一些信息。在这个阶段我所拥有的只是一个使用下面代码的 XDocument;
XDocument myXDoc = XDocument.Parse(soapStringResult);
我在这个站点上看到了关于从 XDocument 中提取数据的各种帖子,但我的问题是我想要的数据项事先不知道。我的出发点是代表“行”的 xPath。Xpath 是
ns2:getDetailsResponse/return/meeting/actionList/action
然后我有一个数据库表,其中包含我想要的与此 Xpath 相关的所有数据项。桌子看起来像这样
XpathDataItem --------------------- ../../@meetingCode ../../meetingDate ../actionCoOrdinator 动作类型 行动依据
当我知道我正在寻找的数据项的 Xpath 时,我可以将数据加载到 DataTable 中,但我只是不知道如何使用一组未知的 XPath 来做到这一点。
提前感谢约翰