读取具有多个名称空间的XML文件
我有一个包含多个命名空间的XML文件。 但我无法从任何节点获取值/文本。
2.0 OIOUBL-2.02 Procurement-BilSim-1.0 88481 2012-05-21 380 DKK ZZ 36433 2012-05-21
我正在尝试阅读一些节点,但我不能。 这是一个例子。
XmlDocument doc = new XmlDocument(); doc.Load(@"C:temp88481.xml"); XmlNamespaceManager manager = new XmlNamespaceManager(doc.NameTable); manager.AddNamespace("cbc", "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"); manager.AddNamespace("cac", "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"); manager.AddNamespace("qdt", "urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2"); manager.AddNamespace("xsd", "https://www.w3.org/2001/XMLSchema"); manager.AddNamespace("udt", "urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2"); manager.AddNamespace("ccts", "urn:un:unece:uncefact:documentation:2"); manager.AddNamespace("ext", "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"); manager.AddNamespace("", "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"); XmlNodeList list = doc.SelectNodes("//Invoice/cbc:ID", manager);
但节点列表没有元素?
你第一次真的很亲密。
与Jon Skeet一样,“Invoice”是根元素,因此您无需声明新的命名空间。
XmlDocument doc = new XmlDocument(); doc.Load(@"C:temp88481.xml"); XmlNamespaceManager manager = new XmlNamespaceManager(doc.NameTable); manager.AddNamespace("cbc", "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"); manager.AddNamespace("cac", "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"); manager.AddNamespace("qdt", "urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2"); manager.AddNamespace("xsd", "https://www.w3.org/2001/XMLSchema"); manager.AddNamespace("udt", "urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2"); manager.AddNamespace("ccts", "urn:un:unece:uncefact:documentation:2"); manager.AddNamespace("ext", "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"); //manager.AddNamespace("", "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"); XmlNodeList list = doc.SelectNodes("//cbc:ID", manager);
鉴于评论,我将假设您可以使用LINQ to XML:
XDocument doc = XDocument.Load("..."); XNamespace cbcNs = "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"; XNamespace cacNs = "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"; // etc XNamespace topNs = "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"; var ids = doc.Elements(topNs + "Invoice") .Elements(cbc + "ID");
或者最上面的一个只是根元素,最后的语句可以是:
上述就是C#学习教程:读取具有多个名称空间的XML文件分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
var ids = doc.Root.Elements(cbc + "ID");
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/987321.html