削除方法は、"xmlns属性です。NETのXML API
-
09-06-2019 - |
質問
XmlElement.属性です。Remove*の方法は細かい作業のための任意の属性により削除された属性から削除されXmlDocument.OuterXml物件です。Xmlnsしかし属性が異なります。以下に例を示します。
XmlDocument doc = new XmlDocument();
doc.InnerXml = @"<Element1 attr1=""value1"" xmlns=""http://mynamespace.com/"" attr2=""value2""/>";
doc.DocumentElement.Attributes.RemoveNamedItem("attr2");
Console.WriteLine("xmlns attr before removal={0}", doc.DocumentElement.Attributes["xmlns"]);
doc.DocumentElement.Attributes.RemoveNamedItem("xmlns");
Console.WriteLine("xmlns attr after removal={0}", doc.DocumentElement.Attributes["xmlns"]);
結果の出力は
xmlns attr before removal=System.Xml.XmlAttribute
xmlns attr after removal=
<Element1 attr1="value1" xmlns="http://mynamespace.com/" />
属性らしいから削除する属性のコレクションでのいずれかをXmlDocument.OuterXml.っているからではないでしょうかは特別の意味この属性。
問題は、これを削除しxmlns属性を使用。NETのXML APIを実装します。明らかにできるだけストから属性を削除しの文字列表現をこなうことが可能であれば、その同じものを使用します。
@編集:私は話す。純2.0にアクセスしてください。
解決
.純DOM APIをサポートしていない変更要素の名前空間であるだけあいです。そこでの問題の解決のための問題で構築して新しいドキュメントがあることが明らかになりで利用できます。純DOM API新しい要素を指定せずにその名前または、を作成することができますXSLTスタイルシートに変えるオリジナルの"名前空間で修飾された"文書の新たな一つの要素がない名前空間修飾.
他のヒント
私の様々なオプションこのスレッドとなりの解決に自分の溶液を除去すxmlns属性の形式をサポートしています。ここは正しくない問題
'Remove the Equifax / Transunian / Experian root node attribute that have xmlns and load xml without xmlns attributes.
If objXMLDom.DocumentElement.NamespaceURI <> String.Empty Then
objXMLDom.LoadXml(objXMLDom.OuterXml.Replace(objXMLDom.DocumentElement.NamespaceURI, ""))
objXMLDom.DocumentElement.RemoveAllAttributes()
ResponseXML = objXMLDom.OuterXml
End If
する必要がないんだ除去xmlnsたコンポーネントです。
多くりあり-シャーがこのスレッド題は私の問題にぴったりですな!こちらはC#に変換:
var dom = new XmlDocument();
dom.Load("C:/ExampleFITrade.xml));
var loaded = new XDocument();
if (dom.DocumentElement != null)
if( dom.DocumentElement.NamespaceURI != String.Empty)
{
dom.LoadXml(dom.OuterXml.Replace(dom.DocumentElement.NamespaceURI, ""));
dom.DocumentElement.RemoveAllAttributes();
loaded = XDocument.Parse(dom.OuterXml);
}
なにこれを除名前空間は?
XmlNamespaceManager mgr = new XmlNamespaceManager("xmlnametable");
mgr.RemoveNamespace("prefix", "uri");
かに接こちらのXElement,XDocumentと XNameSpace 授業からシステム。形式をサポートしています。Linqの名前空間(.純3.0)はより多くのXmlDocumentモデルです。です。私はハマっ.
public static string RemoveXmlns(string xml)
{
//Prepare a reader
StringReader stringReader = new StringReader(xml);
XmlTextReader xmlReader = new XmlTextReader(stringReader);
xmlReader.Namespaces = false; //A trick to handle special xmlns attributes as regular
//Build DOM
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(xmlReader);
//Do the job
xmlDocument.DocumentElement.RemoveAttribute("xmlns");
//Prepare a writer
StringWriter stringWriter = new StringWriter();
XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter);
//Optional: Make an output nice ;)
xmlWriter.Formatting = Formatting.Indented;
xmlWriter.IndentChar = ' ';
xmlWriter.Indentation = 2;
//Build output
xmlDocument.Save(xmlWriter);
return stringWriter.ToString();
}
あり、その要素の名前なので明示的に取り外してください。使用XmlTextWriterのWriteStartElementとWirteStartAttributeと置き換えることにより、属性と空きスペース渡しとなりますが、作成"にチェックを入れます。
私はチェックします。ます。
も南にXmlNamespaceManager? http://msdn.microsoft.com/en-us/library/system.xml.xmlnamespacemanager.removenamespace.aspx がんのようですね。
への変換についても承ります。xml文字列を削除しxmlnsから文字列を作成してもXmlDocumentをこの文字列は名前空間.
こちらはmyションvb.net !
Dim pathXmlTransformado As String = "C:\Fisconet4\process\11790941000192\2015\3\28\38387-1\38387_transformado.xml"
Dim nfeXML As New XmlDocument
Dim loaded As New XDocument
nfeXML.Load(pathXmlTransformado)
nfeXML.LoadXml(nfeXML.OuterXml.Replace(nfeXML.DocumentElement.NamespaceURI, ""))
nfeXML.DocumentElement.RemoveAllAttributes()
Dim dhCont As XmlNode = nfeXML.CreateElement("dhCont")
Dim xJust As XmlNode = nfeXML.CreateElement("xJust")
dhCont.InnerXml = 123
xJust.InnerXml = 123777
nfeXML.GetElementsByTagName("ide")(0).AppendChild(dhCont)
nfeXML.GetElementsByTagName("ide")(0).AppendChild(xJust)
nfeXML.Save("C:\Fisconet4\process\11790941000192\2015\3\28\38387-1\teste.xml")