xmldocument.save는 요소에 대한 전체 Qnames를 출력하지 않습니다
문제
System.xml 클래스를 사용하여 프로그래밍 방식으로 XML 문서를 작성하고 출력 XML이 노드에 Qnames를 사용하지 않고 로컬 이름을 사용하는 방법을 사용하는 문제가 발생했습니다.
예를 들어 원하는 출력
<ex:root>
<ex:something attr:name="value">
</ex:root>
그러나 내가 현재 얻는 것은입니다
<root>
<something name="value">
</root>
내가 사용하는 모든 네임 스페이스가 문서 요소의 XMLNS 속성을 사용하여 완전히 정의되기 때문에 이것은 다소 단순화되지만 여기에서 명확하게 생략했습니다.
XMLWriter 클래스는 XMLDocument를 저장하는 데 사용될 수 있으며 XMLWriterSettings 클래스가 필요하지만 전체 QNames 출력을 얻을 수 있도록이를 구성하는 방법을 알 수 없었습니다.
해결책
당신이 말했듯이, 루트 요소에는 네임 스페이스 정의가 필요합니다.
<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension">
<iis:WebSite Id="asdf" />
</Wix>
위의 XML 코드 :
XmlDocument document = new XmlDocument();
document.AppendChild(document.CreateXmlDeclaration("1.0", null, null));
XmlNode rootNode = document.CreateElement("Wix", "http://schemas.microsoft.com/wix/2006/wi");
XmlAttribute attr = document.CreateAttribute("xmlns:iis", "http://www.w3.org/2000/xmlns/");
attr.Value = "http://schemas.microsoft.com/wix/IIsExtension";
rootNode.Attributes.Append(attr);
rootNode.AppendChild(document.CreateElement("iis:WebSite", "http://schemas.microsoft.com/wix/IIsExtension"));
document.AppendChild(rootNode);
FreateAttribute 및 CreateElement 방법에 대한 논쟁으로 네임 스페이스 URI를 통과 해야하는 요구 사항은 문서가 해당 정보를 도출 할 수 있다고 주장 할 수 있기 때문에 반 직관적 인 것 같습니다.
제휴하지 않습니다 StackOverflow