XElement.Loadを使用するときにXML名前空間を追加します(または無視)する方法
-
12-09-2019 - |
質問
私は、XMLやC#へのLINQを使用してXMLを作成しています。それはすべて私が手動でXMLに一列に追加する必要がある場合を除き、素晴らしい作品。私はそれを通過する値を持っている場合、この行のみそうでなければ私はタグ全体を無視、追加されます。
私は、私はそれは常に私のタグの末尾に「」=のxmlnsに置くXMLにアタッチするとき、私は、文字列に格納が、テキストの文字列にロードするためにXElement.Loadを使用します。
私は、既存の名前空間を使用するか、XMLに文字列を入れたときにそれを無視するXElement.Loadを伝えることができる方法はありますか?
理想的には私はちょうど私の文字列は、余分なタグが追加されずに作成されたXMLに含まれるようにしたい。
以下は、私が現在何をすべきかのサンプルがあります:
string XMLDetails = null;
if (ValuePassedThrough != null)
XMLDetails = "<MyNewTag Code=\"14\" Value=\"" + ValuePassedThrough +"\"></MyNewTag>";
私はXMLを構築する場合、私はXMLに上記の文字列を読み込みます。 xmlnsは=「」XMLDetails値に加算されている場所はここですが、理想的に、私は彼らがこのタグを読み取るしようとすると、それは受信者の問題を引き起こしているとして、これは無視します。
XNamespace ns = "http://namespace-address";
XNamespace xsi = "http://XMLSchema-instance-address";
XDocument RequestDoc = new XDocument(
new XDeclaration("1.0", "utf-8", null),
new XElement(ns + "HeaderTag",
new XAttribute("xmlns", ns),
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(xsi + "schemaLocation", "http://www.addressofschema.xsd"),
new XAttribute("Version", "1"),
new XElement(ns + "OpeningTAG",
...私のXMLコード...
XElement.Load(new StringReader(XMLDetails))
... XMLコードの終わり...
上述したように。私のコードは、それが正常に私のためにXMLを出力し、動作します。私はXElement.Loadを使用してロードそのわずかMyNewTagタグのxmlnsは=「」私の問題を引き起こしていることの末尾に追加されます。
私はこの問題を回避することができますどのように任意のアイデア?ご協力いただきありがとうございます。
よろしく、 リッチ
解決
いかがます:
XElement withoutNamespace = XElement.Load(new StringReader(XMLDetails));
XElement withNamespace = new XElement(ns + withoutNamespace.Name.LocalName,
withoutNamespace.Nodes());
より良い代替として - なぜあなたのどちらかは、あなたが代わりに手動であなたが読んでXML文字列を生成するXElement
を作成し、より良いXMLを構築し、またはしている名前空間が含まれていません。手動でXMLを作成することは非常に稀に良いアイデアではありません。別に何か他のものから、あなたはは有効かもしれをそれそれValuePassedThrough
等を既にエスケープされている、またはエスケープは必要ありませんと仮定している - しかし、それは、少なくとも懸念の原因です。
他のヒント
このよう
XElement XMLDetails = new XElement(ns + "OpeningTAG", new XElement(ns + "MyNewTag", new XAttribute("Code", 14), new XAttribute("Value", 123)));
XDocument RequestDoc = new XDocument(
new XDeclaration("1.0", "utf-8", null),
new XElement(ns + "HeaderTag",
new XAttribute("xmlns", ns),
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(xsi + "schemaLocation", "http://www.addressofschema.xsd"),
new XAttribute("Version", "1"),
XMLDetails));