2017-10-11 8 views
0

私はScott AllenのPuralsight course on Linq Fundamentalsから作業していますが、このリンクセクションではxmlを名前空間接頭辞で読み取ることについて説明していますが、この作業を行うことはできません。私は、単一のXElementを取得する必要があります名前空間接頭辞付きの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> 

は、次のコードから返され、まだ私はないです:

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; 
関連する問題