【发布时间】:2011-07-06 17:45:23
【问题描述】:
感谢一些关于如何在 XML 文件上使用 XPath 来仅提取一些数据并将其加载到数据集中的指针。
ds.ReadXml(fsReadXml);
会将整个 xml 加载到数据集中,但我的要求是仅将特定节点和值加载到数据集。
示例 xml 数据:
<data cobdate="5 Jul 2011" DBStatus="">
<view>BOTH</view>
<show_acctnbr>true</show_acctnbr>
<summary>
<headings sum="Summary" real_per="Realized this period" real_trd="Profit/loss in trading currency" real_select="Profit/loss in selected currency" short_term="Short Term Profit/Loss" long_term="Long Term Profit/Loss" />
<account number="A123456" curr_code="USD" curr_desc="US Dollars" tradecurrvalue="123,123.00" selectcurrvalue="123,123.00" managed="NO" />
<account number="P123456" curr_code="USD" curr_desc="US Dollars" tradecurrvalue="0.00" selectcurrvalue="0.00" managed="NO" />
</summary>
<detail>
<headings dateaq="Date acquired" datesld="Date sold" desc="Description" sec_nbr="Security number " qty="Quantity" cost="Cost basis" />
<account number="A123456" currency="US Dollars">
<item datesold="29 Apr 11" sec_nbr="1234" description="SOME VALUE(USD)" quantity="8,000" proceeds="123,123.0" />
<item datesold="29 Apr 11" sec_nbr="4567" description="SOME VALUE(USD)" quantity="9,000" proceeds="123,123.0" />
</account>
<account number="P123456" currency="US Dollars">
<item datesold="29 Apr 11" sec_nbr="1234" description="SOME VALUE(USD)" quantity="8,000" proceeds="123,123.0" />
<item datesold="29 Apr 11" sec_nbr="4567" description="SOME VALUE(USD)" quantity="9,000" proceeds="123,123.00" />
</account>
</detail>
</data>
在这个示例数据中,我只需要从 <summary> 节点加载账户,如果可能的话,只需要加载 number、tradecurrvalue 和 selectcurrvalue 属性。我使用 C# 和 3.5。
【问题讨论】:
-
是否需要 XPath 和 DataSet?
-
XPath 不是必需的。但要求是将 XML 放入数据集中。我刚刚意识到我的 xml 数据不在文件中,而是作为字符串传递给我。我想我可以使用
XDocument.Parse(string) -
是的,加载或解析无关紧要。
-
好问题,+1。请参阅我对单行 XPath 表达式解决方案的回答 :)
-
@Dimitre 这不是 1 行,最多 1 个语句 (:。为了比较,添加骨架代码以将结果加载到其他内容中。