LINQ to XML 新手问题
我加载了一个具有以下结构的 XML 文档:
<?xml version="1.0" encoding="UTF-8" ?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
<sheetData>
<row r="1" spans="1:2">
<c r="A1" t="s">
<v>0</v>
</c>
<c r="B1" t="s">
<v>1</v>
</c>
</row>
</sheetData>
</worksheet>
我想在文档中查询任何名为 c
且具有属性 t = s
的元素。
我已经尝试了许多不同的变体来执行此操作:
XDocument xmlDoc = XDocument.Load(@"..\..\Sheet1.xml");
var rows = from row in xmlDoc.Root.Descendants("worksheet").Elements("sheetData")
select row;
但它总是返回一个空集。
我缺少什么?
I have an loaded an XML document with the following structure:
<?xml version="1.0" encoding="UTF-8" ?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
<sheetData>
<row r="1" spans="1:2">
<c r="A1" t="s">
<v>0</v>
</c>
<c r="B1" t="s">
<v>1</v>
</c>
</row>
</sheetData>
</worksheet>
I want to query the document for any elements named c
that has the attribute t = s
.
I have tried many different variations on how to do this:
XDocument xmlDoc = XDocument.Load(@"..\..\Sheet1.xml");
var rows = from row in xmlDoc.Root.Descendants("worksheet").Elements("sheetData")
select row;
But it always returns an empty set.
What am I missing?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您需要指定通过后代或元素获得的节点的命名空间。
You need to specify the namespace of the node you are getting with Descendants or Elements.
Root 元素是
元素,因此向根询问工作表后代将始终返回空集。删除.Descendants("worksheet")
子句,您应该开始看到一些结果。The Root element is the
<worksheet/>
element so asking the root for a worksheet descendant will always return an empty set. Remove the.Descendants("worksheet")
clause and you should start seeing some results.这会从 root/sheetData 元素中获取所有“row”元素。
This grabs all the "row" elements from within the root/sheetData element.
这是我在 Linqpad 中编写的一些代码,它对 c 进行过滤,其中 t = s。
我知道答案已被接受,但这个解决方案实际上进行了过滤,而上面的其他答案都没有这样做:)
希望这有帮助!
}
Here is some code I wrote in Linqpad that does the filter on c where t = s.
I know the answer has been accepted, but this solution actually does the filtering whereas none of the other answers above do :)
Hope this helps!
}