Linq to XML 查询 returns null
Linq to XML query returns null
我有以下 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
等于 "Hello?"。但是,给出的结果为空。我假设我的 linq 查询是错误的。谁能给我提示如何正确编写此查询?非常感谢!
Elements
函数 return 是 root
的直接子元素的集合。您应该使用 Descendants
方法,即 return 所有后代元素的集合。
root.Descendants("tuv").Where(e => e.Attribute("lang").Value == "en")
.Select(e => e.Elements("seg")).SingleOrDefault()
.Where(d => d.Value == originalText).SingleOrDefault().Value
如果您想要 select 第一个 "seg" 元素,请执行此操作
var xDoc = XDocument.Parse(File.ReadAllText(@"C:\YourDirectory\sample.xml"));
var firstSeg = xDoc.Descendants("seg").First();
评论中满足OP要求的代码
var seg = xDoc.Descendants("tuv")
.First(tuv => tuv.Attribute("lang").Value == "en")
.Element("seg")
.Value;
我有以下 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
等于 "Hello?"。但是,给出的结果为空。我假设我的 linq 查询是错误的。谁能给我提示如何正确编写此查询?非常感谢!
Elements
函数 return 是 root
的直接子元素的集合。您应该使用 Descendants
方法,即 return 所有后代元素的集合。
root.Descendants("tuv").Where(e => e.Attribute("lang").Value == "en")
.Select(e => e.Elements("seg")).SingleOrDefault()
.Where(d => d.Value == originalText).SingleOrDefault().Value
如果您想要 select 第一个 "seg" 元素,请执行此操作
var xDoc = XDocument.Parse(File.ReadAllText(@"C:\YourDirectory\sample.xml"));
var firstSeg = xDoc.Descendants("seg").First();
评论中满足OP要求的代码
var seg = xDoc.Descendants("tuv")
.First(tuv => tuv.Attribute("lang").Value == "en")
.Element("seg")
.Value;