我有以下XML文档可供使用。
<ns0:ProductQuantity>
<ns0:Measurement>
<ns0:MeasurementValue>8500</ns0:MeasurementValue>
<ns0:UnitOfMeasureCode Domain="UN-Rec-20">KG</ns0:UnitOfMeasureCode>
</ns0:Measurement>
</ns0:ProductQuantity>
我还无法弄清楚如何将此文档中的“KG”值读入我的C#代码中的字符串。我已经提取了其他元素值,但它们都没有附加Domain="UN-Rec->20"
的属性。我正在使用Visual Studio 2013,并且我当前如何提取其他数据的想法如下。
XmlDocument doc = new XmlDocument();
doc.Load(filePath);
root = doc.DocumentElement;
prodAmt_xml[1] = root.GetElementsByTagName("ns0:MeasurementValue")[0].InnerText;
如果有人有任何煽动这个问题以及获得这些“测量单位”的方法,我将非常感激。
答案 0 :(得分:1)
您需要考虑XML名称空间。 ns0
实际上不是元素名称的一部分,它是映射到命名空间(通常是URL)的前缀。
使用Linq to XML和C#6,假设ns0
的网址为http://foo.bar/
:
var doc = XDocument.Load(filePath);
var ns = XNamespace.Get("http://foo.bar/");
var unit =
doc.Descendants(ns + "ProductQuantity")
.Elements(ns + "Measurement")
.Elements(ns + "UnitOfMeasureCode")
.Where(e => e.Attribute("Domain")?.Value == "UN-Rec->20")
.Select(e => e.Value)
.FirstOrDefault();
请注意?.
需要C#6;如果你使用的是早期版本,你也可以这样做:
var doc = XDocument.Load(filePath);
var ns = XNamespace.Get("http://foo.bar/");
var unit =
(from e doc.Descendants(ns + "ProductQuantity")
.Elements(ns + "Measurement")
.Elements(ns + "UnitOfMeasureCode")
let attr = e.Attribute("Domain")
let domain = attr != null ? attr.Value : null
where domain == "UN-Rec->20"
select e.Value).FirstOrDefault();