XElementから名前空間とスキーマを使用してXMLを作成する
-
22-07-2019 - |
質問
長々とした質問-我慢してください!
名前空間とスキーマを使用してXMLドキュメントをプログラムで作成したい。次のようなもの
<myroot
xmlns="http://www.someurl.com/ns/myroot"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.someurl.com/ns/myroot http://www.someurl.com/xml/schemas/myschema.xsd">
<sometag>somecontent</sometag>
</myroot>
かなり素晴らしい(新しい)LINQを使用していますが、XElementを使用して上記を実行したいと考えていました。
オブジェクトにToXElement()メソッドがあります:
public XElement ToXElement()
{
XNamespace xnsp = "http://www.someurl.com/ns/myroot";
XElement xe = new XElement(
xnsp + "myroot",
new XElement(xnsp + "sometag", "somecontent")
);
return xe;
}
名前空間を正しく与えてくれます。
<myroot xmlns="http://www.someurl.com/ns/myroot">
<sometag>somecontent</sometag>
</myroot>
私の質問:スキーマのxmlns:xsiおよびxsi:schemaLocation属性を追加するにはどうすればよいですか
(ところで、属性名にコロン&quot;:&quot;を使用するとエラーが発生するため、単純なXAtttributesは使用できません...)
またはXDocumentまたは他のLINQクラスを使用する必要がありますか?
ありがとう...
解決
この記事から、あなたが1つのXNamespaceを作成し、ルートに属性を追加してから、両方のXNamespaceを使用してタウンに移動します。
// The http://www.adventure-works.com namespace is forced to be the default namespace.
XNamespace aw = "http://www.adventure-works.com";
XNamespace fc = "www.fourthcoffee.com";
XElement root = new XElement(aw + "Root",
new XAttribute("xmlns", "http://www.adventure-works.com"),
/////////// I say, check out this line.
new XAttribute(XNamespace.Xmlns + "fc", "www.fourthcoffee.com"),
///////////
new XElement(fc + "Child",
new XElement(aw + "DifferentChild", "other content")
),
new XElement(aw + "Child2", "c2 content"),
new XElement(fc + "Child3", "c3 content")
);
Console.WriteLine(root);
スキーマの配置方法を示すフォーラム投稿 。
他のヒント
David Bに感謝-このすべてを理解しているとは確信が持てませんが、このコードは必要なものを取得します...
public XElement ToXElement()
{
const string ns = "http://www.someurl.com/ns/myroot";
const string w3 = "http://wwww.w3.org/2001/XMLSchema-instance";
const string schema_location = "http://www.someurl.com/ns/myroot http://www.someurl.com/xml/schemas/myschema.xsd";
XNamespace xnsp = ns;
XNamespace w3nsp = w3;
XElement xe = new XElement(xnsp + "myroot",
new XAttribute(XNamespace.Xmlns + "xsi", w3),
new XAttribute(w3nsp + "schemaLocation", schema_location),
new XElement(xnsp + "sometag", "somecontent")
);
return xe;
}
名前空間と文字列などを連結すると、たとえば
w3nsp + "schemaLocation"は結果のXMLで
xsi:schemaLocationという属性を与えるように見えますが、これが必要なものです。
所属していません StackOverflow