XML 仅查询 returns 第一个元素
XML query returns only first element
我需要 return 此 XML 中的 3 个项目元素,而不是第一个元素 return 3 次。我对 LINQ XML 的了解不多。我浏览了网站上的其他 post,但都有些不同。
### Expected Output ###
10/14/2015
05:00
044000031910
044000031912
044000031913
10/15/2015
06:00
044000031920
044000031922
044000031923
### Current Output ###
10/14/2015
05:00
044000031910
044000031910
044000031910
10/15/2015
06:00
044000031920
044000031920
044000031920
XML 例子
<Orders>
<Transaction>
<TransDate>10/14/2015</TransDate>
<TransTime>05:00</TransTime>
<Item>
<SequenceNumber>1</SequenceNumber>
<ScanCode>044000031910</ScanCode>
</Item>
<Item>
<SequenceNumber>2</SequenceNumber>
<ScanCode>858310004011</ScanCode>
</Item>
<Item>
<SequenceNumber>3</SequenceNumber>
<ScanCode>092657011712</ScanCode>
</Item>
</Transaction>
<Transaction>
<TransDate>10/15/2015</TransDate>
<TransTime>06:00</TransTime>
<Item>
<SequenceNumber>1</SequenceNumber>
<ScanCode>044000031920</ScanCode>
</Item>
<Item>
<SequenceNumber>2</SequenceNumber>
<ScanCode>858310004021</ScanCode>
</Item>
<Item>
<SequenceNumber>3</SequenceNumber>
<ScanCode>092657011722</ScanCode>
</Item>
</Transaction>
C# 示例
var doc = XDocument.Load("Data.xml");
var data = from item in doc.Descendants("Transaction")
select new
{
TransDate = (string)item.Element("TransDate"),
TransTime = (string)item.Element("TransTime"),
items = from order in item.Elements("Item")
select new
{
ScanCode = (string)item.Element("Item").Element("ScanCode")
}
};
foreach (var Item in data)
{
textBox1.AppendText(Item.TransDate + Environment.NewLine);
textBox1.AppendText(Item.TransTime + Environment.NewLine);
foreach (var item in Item.items)
{
textBox1.AppendText(item.ScanCode + Environment.NewLine);
}
textBox1.AppendText(Environment.NewLine);
}
这会给你预期的输出:-
select new
{
ScanCode = (string)order.Element("ScanCode")
}
您已经有 order
引用变量,其中包含 Item
集合。不用再往上了,直接用order
就可以了。
根据您当前的代码,您试图在 Transaction
集合中查找元素 item
,因此它只找到第一个。
我需要 return 此 XML 中的 3 个项目元素,而不是第一个元素 return 3 次。我对 LINQ XML 的了解不多。我浏览了网站上的其他 post,但都有些不同。
### Expected Output ###
10/14/2015
05:00
044000031910
044000031912
044000031913
10/15/2015
06:00
044000031920
044000031922
044000031923
### Current Output ###
10/14/2015
05:00
044000031910
044000031910
044000031910
10/15/2015
06:00
044000031920
044000031920
044000031920
XML 例子
<Orders>
<Transaction>
<TransDate>10/14/2015</TransDate>
<TransTime>05:00</TransTime>
<Item>
<SequenceNumber>1</SequenceNumber>
<ScanCode>044000031910</ScanCode>
</Item>
<Item>
<SequenceNumber>2</SequenceNumber>
<ScanCode>858310004011</ScanCode>
</Item>
<Item>
<SequenceNumber>3</SequenceNumber>
<ScanCode>092657011712</ScanCode>
</Item>
</Transaction>
<Transaction>
<TransDate>10/15/2015</TransDate>
<TransTime>06:00</TransTime>
<Item>
<SequenceNumber>1</SequenceNumber>
<ScanCode>044000031920</ScanCode>
</Item>
<Item>
<SequenceNumber>2</SequenceNumber>
<ScanCode>858310004021</ScanCode>
</Item>
<Item>
<SequenceNumber>3</SequenceNumber>
<ScanCode>092657011722</ScanCode>
</Item>
</Transaction>
C# 示例
var doc = XDocument.Load("Data.xml");
var data = from item in doc.Descendants("Transaction")
select new
{
TransDate = (string)item.Element("TransDate"),
TransTime = (string)item.Element("TransTime"),
items = from order in item.Elements("Item")
select new
{
ScanCode = (string)item.Element("Item").Element("ScanCode")
}
};
foreach (var Item in data)
{
textBox1.AppendText(Item.TransDate + Environment.NewLine);
textBox1.AppendText(Item.TransTime + Environment.NewLine);
foreach (var item in Item.items)
{
textBox1.AppendText(item.ScanCode + Environment.NewLine);
}
textBox1.AppendText(Environment.NewLine);
}
这会给你预期的输出:-
select new
{
ScanCode = (string)order.Element("ScanCode")
}
您已经有 order
引用变量,其中包含 Item
集合。不用再往上了,直接用order
就可以了。
根据您当前的代码,您试图在 Transaction
集合中查找元素 item
,因此它只找到第一个。