문제

XmlElement.특성이 있습니다.제*방법은 잘 작동한 임의의 속성이 결과에서 제거 속에서 제거되 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 를 사용합니다.분명히 나 있는 특성을 제거하에서의 문자열 표현,하지만 내가 궁금해 가능한 경우 같은 일을 할 사용하는 API 입니다.

@편집:나는에 대해 얘기하는 거에요.NET2.0.

도움이 되었습니까?

해결책

.NET DOM API 를 지원하지 않을 수정 요소의 네임스페이스는 당신이 무엇을 기본적으로 행하려고 노력하는 것입니다.그래서를 해결하기 위해,당신의 문제가 당신을 구성하는 새로운 문서 또는 다른 방법 중 하나.사용할 수 있습니다.NET DOM API 을 만들고 새로운 요소를 지정하지 않고 그것의 네임스페이스가 있습니다.또는,당신은 당신을 만들 수 있습 XSLT 스타일을 변환하는 원래는"네임스페이스"문서 새로운 중 하나에서 있는 요소가 될 것입니다하지 않는 네임스페이스-자격을 갖춘.

다른 팁

나는 다양한 옵션이 스레드에 와서 해결하는 내 자신에 대한 솔루션을 제거하 xmlns 특성에서는 xml.이것이 제대로 작동하는 없고 아무 문제점:

'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");

하지만 어쨌든 측면에 여기에,이하려면,다음,XDocument 고 XNameSpace 클래스에서는 시스템입니다.Xml.Linq 네임스페이스(.Net3.0)은 더 나은 많은 보다 오래 된 XmlDocument 모델입니다.을 제공합니다.I am addicted.

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 이 문자열을 사용하여하는 것입니다하지 않는 네임스페이스가 있습니다.

여기에 내에서 솔루션 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")
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top