米国財務省のウェブサイトhereで提供されているXMLをLINQのXDocument
を使用して解析しようとしていますが、プログラムによって名前空間を解析しようとしています。ここでXDocumentで名前空間で属性を解析する
XDocument doc = XDocument.Load("http://data.treasury.gov/feed.svc/DailyTreasuryYieldCurveRateData?$filter=year(NEW_DATE)%20eq%202016");
そのXMLの機能縮小版である:彼らはしているような値に*の要素:*とD:Iハードコードの名前空間がmにアクセスするために、場合
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed xml:base="http://data.treasury.gov/Feed.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
<entry>
<content type="application/xml">
<m:properties>
<d:NEW_DATE m:type="Edm.DateTime">2016-01-04T00:00:00</d:NEW_DATE>
<d:BC_1YEAR m:type="Edm.Double">0.61</d:BC_1YEAR>
</m:properties>
</content>
</entry>
</feed>
XNamespace ns = "http://www.w3.org/2005/Atom";
XNamespace m = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
XNamespace d = "http://schemas.microsoft.com/ado/2007/08/dataservices";
その後、私は
Convert.ToDateTime(doc.Root.Element(ns + "entry").Element(ns + "content").Element(m + "properties").Element(d + "NEW_DATE"));
と日付の値を解析することができ:そうのようなルートで定義されています
これは問題なく動作します。しかし、私はむしろないハードコードネームスペースをだろうので、私は同様の方法を使用して、ルートからそれらを引くしようとしていますが、私は戻ってnull
値を取得:
XNamespace ns = doc.Root.Attribute("xmlns").Value; // gives "http://www.w3.org/2005/Atom"
XNamespace m = doc.Root.Attribute(ns + "m").Value; <--- ERROR because the attribute is null
XNamespace d = doc.Root.Attribute(ns + "d").Value; <--- ERROR because the attribute is null
私はd
とm
を調べる場合、それは結局のところそれらは名前空間http://www.w3.org/2000/xmlns/
を使用します。これはデフォルトでなければなりません。要素のようにxmlns
属性に定義されている名前空間を使用しないのはなぜですか?属性の順序は重要ですか?あるいは、xmlns
名前空間は、明示的に使用されたときに単に上書きすることはできませんか?
'xmlns'接頭辞は' http:// www.w3.org/2000/ xmlns/'名前空間で固定されており、上書きすることはできません。 – PetSerAl
私はちょうど 'xmlns =" http://www.w3.org/2005/Atom "で現地版を試しましたが、それはまだ同じ問題があったので、注文はしませんでした問題。限り、私はxmlnsをハードコーディングして燃えていない限り、私はうまくいくはずです。ちょっと変わって、要素の名前空間は変更されますが、名前空間タグ自体は変更されないようです - 私はこれを少し間違った角度から見ているように感じます。 – Danny
私は、名前空間をハードコーディングする方が接頭語をハードコーディングする方がはるかに望ましいと考えていました。接頭辞は変更することができ、XMLは意味的に同じです。これは名前空間の変更よりもはるかに可能性が高いです。 –