XMLタグの特殊文字でXelementを取得する方法
-
28-09-2019 - |
質問
SDMXに準拠しているXMLドキュメントがあります。これはSDMXに準拠しています。これが短いサンプルです:
<root>
<csf:DataSet id="J10">
<kf:Series>
<value> 107.92
</value>
</kf:Series>
</csf:DataSet>
</root>
ただし、C#でLINQからXMLを使用して以下を実行しようとすると、Xmlexceptionが表示されます。
XElement dataset = document.Element("csf:DataSet");
例外テキストは次のとおりです。
XMLを制御できません。これを克服する方法についてのアイデアはありますか?
解決
var csf = XNamespace.Get("<csfNamespaceUri>");
document.Element(csf + "DataSet");
CSF名前空間のURIを指定する必要があることに注意してください。完全な例:
var doc = XDocument.Parse(@"
<root xmlns:csf=""http://tempuri.org/1"" xmlns:kf=""http://tempuri.org/2"">
<csf:DataSet id=""J10"">
<kf:Series>
<value> 107.92
</value>
</kf:Series>
</csf:DataSet>
</root>
");
var dataSet = doc.Descendants(XNamespace.Get("http://tempuri.org/1") + "DataSet").Single();
他のヒント
XnamesSpaceを使用して、抽出しようとしているデータセット要素を修飾してみてください。
同じ問題がありました。ここでの答えの1つは私の道を助けてくれましたが、すべてではありませんので、ここに私の解決策 /説明があります。
あなたがする必要があるのは、このような名前空間のURLを指定することです。
XNamespace ns = "http://www.example.com";
...次に、それぞれの名前空間を準備します Element
:
var someElement = new XElement(ns + "ElementName", "Value");
しかし、これが機能するためには、あなたは その特定のURIを含める必要があります 次のようにXMLで:
var rootElement =
new XElement(ns + "MyRootElement",
new XAttribute(XNamespace.Xmlns + "ns",
"http://www.example.com"));
これで追加できます someElement
(およびその他) rootElement
, 、および名前空間は、ルートで(URLによって)参照されているため、含まれます。
rootElement.Add(someElement);
rootElement.Add(new XElement(ns + "OtherElement", "Other value"));
これにより、次のようなXMLが生成されます。
<ns:MyRootElement xmlns:ns="http://www.example.com">
<ns:ElementName> (...) </ns:ElementName>
<ns:OtherElement> (...) </ns:OtherElement>
</ns:MyRootElement>
所属していません StackOverflow