对此有很多麻烦:(
基于之前的问题here,我现在可以从XML文件中获取所有价格,但是如果我想获取startdate
(在整个文档中会有所变化)和价格(将会在整个文档中更改)并将其放在数据表中。从上一个问题中可以看到,我试图将其放入datatable
中,但是如果我集成了提供的解决方案,那么对于XML文件中的行数,我将获得相同的FormalName和价格(大约700)。这是我正在处理的代码。
string[] arr = new string[3];
var dr = from n in prices.Descendants("COLUMN")
select new string[]
{
arr[0] = n.Attribute("FormalName").Value
};
foreach (var item in dr)
{
dt.Rows.Add(item[0]);
}
这是上一个问题中提供的解决方案,我需要将其集成到我的解决方案中。
var result = from c in prices.Descendants("COLUMN")
where c.Attribute("FormalName")?.Value == "Price"
select c.Value;
我确实考虑过对要提取的每个部分使用linq语句,这样就将startdate和price组合在一起,然后如何将它们组合在一起,但我不能确定订单的顺序?
更新:
示例XML
<myPrices>
<Prices Date="10-Oct-18" ReportName="myReport">
<Record RecordId="1">
<COLUMN DisplayName="Start Date" FormalName="startdate">10.10.2018</COLUMN>
<COLUMN DisplayName="End Date" FormalName="Price">10</COLUMN>
</Record>
<Record RecordId="2">
<COLUMN DisplayName="Start Date" FormalName="startdate">11.10.2018</COLUMN>
<COLUMN DisplayName="End Date" FormalName="Price">20</COLUMN>
</Record>
</Prices>
</myPrices>
数据表
答案 0 :(得分:1)
您可以通过多种方式进行操作。 Linq是一种方法,但是对于一个简单的示例,请尝试以下操作:
@Bean
@ConditionalOnProperty(value = "property", havingValue = "value", matchIfMissing = true)
public MyBean myBean() ...
您可以使用XPath模式过滤节点。
答案 1 :(得分:0)
我首先用所需的列创建一个DataTable
,然后通过Linq-to-XML填充它。
您可以使用Select查询创建代表每一行的对象,然后使用标准方法为每个项目创建DataRows ...
class Quest
{
public string Answer1;
public string Answer2;
public string Answer3;
public string Answer4;
}
public static void Main()
{
var doc = XDocument.Load("filename.xml");
var rows = doc.Descendants("QuestId").Select(el => new Quest
{
Answer1 = el.Element("Answer1").Value,
Answer2 = el.Element("Answer2").Value,
Answer3 = el.Element("Answer3").Value,
Answer4 = el.Element("Answer4").Value,
});
// iterate over the rows and add to DataTable ...
}