xelement.load를 사용할 때 XML 네임 스페이스를 추가 (또는 무시하는) 방법
-
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));