문제

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를 통과 해야하는 요구 사항은 문서가 해당 정보를 도출 할 수 있다고 주장 할 수 있기 때문에 반 직관적 인 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top