[英]Parse XML object from XLIFF file C#
I am trying to Parse XML object with two namespaces inside the file.我正在尝试使用文件内的两个命名空间来解析 XML object。
> <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>
I want to take the value from unit id="1" name="air " from property name, " mda:meta type="type" property type and source>Too many messages for 1 minute - property segment . I want to assign their value to other properties, so basically to extract their value.我想从属性名称、“ mda:meta type="type" 属性类型和源>Too many messages for 1 minute - property segment中获取unit id="1" name="air " 的值。我想分配它们的值要其他属性,所以基本上要提取它们的值。
My code now is:我现在的代码是:
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()!;
I know that somehow I have to access the second namespace, but I don't know how to do it.我知道我必须以某种方式访问第二个命名空间,但我不知道该怎么做。 Any help here will be appreciated.
这里的任何帮助将不胜感激。
Try using XNamespace
and LINQ
尝试使用
XNamespace
和LINQ
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();
OR (to get all values to list)或(要列出所有值)
var elements = xliff.Descendants(ns1 + "unit")
.Descendants(ns2 + "meta")
.Where(x => (string)x.Attribute("type") == "type")
.Select(y => y.Value.ToString())
.ToList();
OR (to get source from segment)或(从段获取源)
var nameSegment = xliff.Descendants(ns1 + "unit")
.Descendants(ns1 + "segment")
.Select(x => x.Element(ns1 + "source").Value)
.ToList();
Try following:尝试以下操作:
XDocument xliff = XDocument.Load(Path.GetFullPath(filePath));
XNamespace ns = xliff.Root.GetDefaultNamespace();
XNamespace nsMda = xliff.Root.GetNamespaceOfPrefix("mda");
List<XElement> elements = xliff.Descendants(ns + "unit").ToList();
//this part not working
List<XElement> metaData = elements.Descendants(nsMda + "metadata").ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.