programing

XElement 네임스페이스(방법?)

muds 2023. 11. 7. 21:10
반응형

XElement 네임스페이스(방법?)

다음과 같은 노드 접두사를 사용하여 xml 문서를 만드는 방법:

<sphinx:docset>
  <sphinx:schema>
    <sphinx:field name="subject"/>
    <sphinx:field name="content"/>
    <sphinx:attr name="published" type="timestamp"/>
 </sphinx:schema>

내가 뭔가를 실행하려고 할 때new XElement("sphinx:docset")나는 예외를 받습니다.

처리되지 않은 예외:시스템.Xml.Xml 예외:':' 문자(16진수 값 0x3A)는 이름에 포함할 수 없습니다.
시스템에서.Xml.XmlConvert.NCName 확인(문자열 이름, 예외)유형 예외유형)
시스템에서.Xml.Linq.XName..ctor(XName 공백, 문자열 localName)
시스템에서.Xml.Linq.XNamespace.GetName(String localName)
시스템에서.Xml.Linq.XName.Get(String expandedName)

LINQ에서 XML로의 변환은 매우 쉽습니다.

XNamespace ns = "sphinx";
XElement element = new XElement(ns + "docset");

또는 "외계인"들이 제대로 작동하여 자신의 예처럼 보이게 하려면 다음과 같은 것이 필요합니다.

XNamespace ns = "http://url/for/sphinx";
XElement element = new XElement("container",
    new XAttribute(XNamespace.Xmlns + "sphinx", ns),
    new XElement(ns + "docset",
        new XElement(ns + "schema"),
            new XElement(ns + "field", new XAttribute("name", "subject")),
            new XElement(ns + "field", new XAttribute("name", "content")),
            new XElement(ns + "attr", 
                         new XAttribute("name", "published"),
                         new XAttribute("type", "timestamp"))));

다음을 산출합니다.

<container xmlns:sphinx="http://url/for/sphinx">
  <sphinx:docset>
    <sphinx:schema />
    <sphinx:field name="subject" />
    <sphinx:field name="content" />
    <sphinx:attr name="published" type="timestamp" />
  </sphinx:docset>
</container>

문서의 네임스페이스를 읽고 다음과 같은 쿼리에 사용할 수 있습니다.

XDocument xml = XDocument.Load(address);
XNamespace ns = xml.Root.Name.Namespace;
foreach (XElement el in xml.Descendants(ns + "whateverYourElementNameIs"))
    //do stuff

언급URL : https://stackoverflow.com/questions/4985974/xelement-namespaces-how-to

반응형