2017-10-11 103 views
0

我一直在从Scott Allen的Puralsight course on Linq Fundamentals开始工作,此链接部分描述了使用命名空间前缀读取xml,但我无法完成此工作。Linq到名称空间前缀不起作用的XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<OutboundEvent 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="urn:abb.com:assetsuite:IF:Event http://apifw/devifa/xml/GeneralLedger/GeneralLedger.Publish.Event.V940.xsd" 
    xmlns="urn:abb.com:assetsuite:IF:Event" 
    xmlns:hdr="urn:abb.com:assetsuite:IF:Header" 
    xmlns:bo="urn:abb.com:assetsuite:IF:BO" 
    xmlns:boe="urn:abb.com:assetsuite:IF:IFExtension" 
> 
... 
    <bo:BusinessObject> 
    ... 
    </bo:BusinessObject> 
</OutboundEvent> 

我应该得到一个单一的XElement从下面的代码返回,但我并不:

var document = XDocument.Load(path); 
var bo = (XNamespace)"urn:abb.com:assetsuite:IF:BO"; 

var businessobjects = 
    from elements in document.Element("OutboundEvent")?.Elements(bo + "BusinessObject") 
     ?? Enumerable.Empty<XElement>() 
    select elements; 
+0

请勿截取_text _...后的实际文字。 –

+0

粘贴跨越多页的XML的最佳方式是什么? – CodenameCain

+0

粘贴XML的相关部分,它不需要是全文。足以说明问题。 –

回答

2

OutboundEvent节点是命名空间,但你的代码引用它,就好像它是不是。它位于urn:abb.com:assetsuite:IF:Event命名空间中。

XNamespace ns = "urn:abb.com:assetsuite:IF:Event"; 
XNamespace bo = "urn:abb.com:assetsuite:IF:BO"; 
var businessObjects = 
    document.Elements(ns + "OutboundEvent").Elements(bo + "BusinessObject"); 
+0

它实际上在默认名称空间中。但是,是的,应该定义和使用默认的命名空间。 –

+1

对不起,默认命名空间不适合它。我忘记了它叫什么。根?空? –

1

不应该为OutboundEvent元素定义和使用默认命名空间吗?

var document = XDocument.Load(path); 
var ns = (XNamespace)"urn:abb.com:assetsuite:IF:Event"; 
var bo = (XNamespace)"urn:abb.com:assetsuite:IF:BO"; 

var businessobjects = 
    from elements in document.Element(ns + "OutboundEvent")?.Elements(bo + "BusinessObject") 
     ?? Enumerable.Empty<XElement>() 
    select elements;