xelement.load를 사용할 때 XML 네임 스페이스를 추가 (또는 무시하는) 방법

StackOverflow https://stackoverflow.com/questions/1453564

  •  12-09-2019
  •  | 
  •  

문제

LINQ에서 XML 및 C#을 사용하여 XML을 생성하고 있습니다. XML에 수동으로 줄을 추가해야 할 때를 제외하고는 모두 잘 작동합니다. 이 행은 통과 할 값이있는 경우에만 추가됩니다. 그렇지 않으면 전체 태그 만 무시합니다.

xlement.load를 사용하여 문자열에 저장하는 텍스트 문자열로로드하지만 XML에 첨부하면 항상 태그 끝에 xmlns = ""에 넣습니다.

Xlement.Load에게 기존 네임 스페이스를 사용하거나 문자열을 XML에 넣을 때 무시할 수있는 방법이 있습니까?

이상적으로는 내 문자열이 추가 태그가 추가되지 않고 생성되는 XML에 포함되기를 원합니다.

아래는 내가 현재하는 일의 샘플입니다.

string XMLDetails = null;
if (ValuePassedThrough != null)
XMLDetails = "<MyNewTag Code=\"14\" Value=\"" + ValuePassedThrough +"\"></MyNewTag>";

XML을 구축하면 위의 문자열을 XML에로드합니다. 여기에는 xmlns = ""가 xmldetails 값에 추가되는 곳이지만 이상적으로는이 태그를 읽으려고 할 때 수신자와의 문제를 일으키기 때문에이 무시를 원합니다.

XNamespace ns = "http://namespace-address";
    XNamespace xsi = "http://XMLSchema-instance-address";

XDocument RequestDoc = new XDocument(
    new XDeclaration("1.0", "utf-8", null),
    new XElement(ns + "HeaderTag",
        new XAttribute("xmlns", ns),
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(xsi + "schemaLocation", "http://www.addressofschema.xsd"),
        new XAttribute("Version", "1"),
            new XElement(ns + "OpeningTAG",

... 내 XML 코드 ...

XElement.Load(new StringReader(XMLDetails))

... XML 코드의 끝 ...

앞에서 말했다시피. 내 코드가 작동하고 XML을 성공적으로 출력합니다. xelement.load를 사용하여로드하는 MyNewtag 태그만으로 xmlns = ""가 끝날 때까지 추가되어 문제가 발생합니다.

내가 이것에 대해 어떻게 일할 수 있는지 아이디어가 있습니까? 당신의 도움을 주셔서 감사합니다.

안부, 부자

도움이 되었습니까?

해결책

어때요 :

XElement withoutNamespace = XElement.Load(new StringReader(XMLDetails));
XElement withNamespace = new XElement(ns + withoutNamespace.Name.LocalName,
                                      withoutNamespace.Nodes());

더 나은 대안으로 - XML을 구축 할 때 네임 스페이스를 포함 시키거나 더 나은 XElement XML 문자열을 수동으로 생성하는 대신 읽습니다. 수동으로 XML을 만드는 것은 거의 좋은 생각이 아닙니다. 다른 것 외에도, 당신은 그것을 가정합니다 ValuePassedThrough 이미 탈출했거나 탈출이 필요하지 않습니다. 5월 유효합니다 - 그러나 적어도 우려의 원인입니다.

다른 팁

이와 같이

XElement XMLDetails = new XElement(ns + "OpeningTAG", new XElement(ns + "MyNewTag", new XAttribute("Code", 14), new XAttribute("Value", 123)));

XDocument RequestDoc = new XDocument(
    new XDeclaration("1.0", "utf-8", null),
    new XElement(ns + "HeaderTag",
        new XAttribute("xmlns", ns),
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(xsi + "schemaLocation", "http://www.addressofschema.xsd"),
        new XAttribute("Version", "1"),
            XMLDetails));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top