【发布时间】:2015-11-28 22:12:23
【问题描述】:
我有以下 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<tmx version="1.4">
<header/>
<body>
<tu>
<tuv lang="en">
<seg>Hello?</seg>
</tuv>
<tuv lang="es">
<seg>¿Diga?</seg>
</tuv>
</tu>
</body>
</tmx>
我正在尝试使用此代码来检索第一个 <seg> 标记的内容:
root.Elements("tuv")
.Where(e => e.Attribute("lang").Value.Equals("en"))
.Select(e => e.Elements("seg"))
.SingleOrDefault()
.Where(d => d.Value.Equals(originalText))
.SingleOrDefault()
.Value;
originaltext 等于“你好?”在这种情况下。但是,给出的结果为空。我假设我的 linq 查询是错误的。谁能给我一个关于如何正确编写这个查询的提示?非常感谢!
【问题讨论】:
-
因为
root没有Element"tuv"。 -
确实 - 您可能想要使用
Descendants。您还可以使用==而不是调用Equals来简化代码,例如e.Attribute("lang").Value == "en"。我还强烈建议每行使用一个 LINQ 运算符(即方法调用) - 将代码垂直放置,这样会更容易阅读。接下来,SingleOrDefault返回一个值……你不想在那之后使用Where。 -
感谢您的 cmets!
-
@JonSkeet 如何在不使用 SingleOrDefault 的情况下指定具有给定内容的单个
以及在哪里? -
你可能想要before SingleOrDefault 的位置。过滤到正确的序列,然后取其唯一的元素。
标签: c# xml linq linq-to-xml