gpt4 book ai didi

c# - 从 XLIFF 文件 C# 中解析 XML 对象

转载 作者:行者123 更新时间:2023-12-05 03:19:27 25 4
gpt4 key购买 nike

我正在尝试解析文件中带有两个命名空间的 XML 对象。

<xliff srcLang="en" version="23.0"
xmlns="asd:asd:asd:asd:xliff:document:23.0"
xmlns:mda="asd:asd:asd:asd:xliff:document:23.0">
<file id="f"
original="someUrl">
<unit id="1" name="air">
<mda:data>
<mda:group category="attributes">
<mda:meta type="id">Color</mda:meta>
<mda:meta type="abbr">I_AI_LOW</mda:meta>
<mda:meta type="type">Message</mda:meta>
</mda:group>
</mda:data>
<segment>
<source>Too many messages for 1 minute</source>
</segment>
</unit>
</file>
</xliff>

我想从 unit id="1"name="air"属性名称中获取值,"mda:meta type="type"属性类型source>Too many messages for 1 minute - property segment。我想将它们的值分配给其他属性,所以基本上是提取它们的值。

我现在的代码是:

 xliff = XDocument.Load(Path.GetFullPath(filePath));
var ns = xliff.Root!.Name.Namespace;

var elements = xliff.Descendants()
.Elements(ns + "unit").ToList();

//this part not working
XElement tempElement = elements.Descendants(XName.Get("mda:metadata",
ns.ToString())).FirstOrDefault()!;

我知道我必须以某种方式访问​​第二个命名空间,但我不知道该怎么做。我们将不胜感激。

最佳答案

尝试使用 XNamespaceLINQ

XNamespace ns1 = "asd:asd:asd:asd:xliff:document:23.0";
XNamespace ns2 = "asd:asd:asd:asd:xliff:document:23.0";

var type_value = xliff.Descendants(ns1 + "unit")
.Descendants(ns2 + "meta")
.Where(x => (string)x.Attribute("type") == "type")
.Select(y => y.Value)
.FirstOrDefault()
.ToString();

或(获取所有要列出的值)

var elements =  xliff.Descendants(ns1 + "unit")
.Descendants(ns2 + "meta")
.Where(x => (string)x.Attribute("type") == "type")
.Select(y => y.Value.ToString())
.ToList();

或(从段中获取源)

var nameSegment = xliff.Descendants(ns1 + "unit")
.Descendants(ns1 + "segment")
.Select(x => x.Element(ns1 + "source").Value)
.ToList();

关于c# - 从 XLIFF 文件 C# 中解析 XML 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73445584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com