인쇄방법XDocument 사용
ToString 방법을 사용할 때 XDocument에서 xml 버전을 인쇄할 수 있는 방법이 있습니까?다음과 같은 것을 출력하도록 합니다.
<?xml version="1.0"?>
<!DOCTYPE ELMResponse [
]>
<Response>
<Error> ...
다음 사항이 있습니다.
var xdoc = new XDocument(new XDocumentType("Response", null, null, "\n"), ...
이것은 괜찮지만 위에 언급된 "<?xml 버전"이 누락된 인쇄 버전"이 없습니다.
<!DOCTYPE ELMResponse [
]>
<Response>
<Error> ...
제가 직접 수작업으로 출력하면 될 것으로 알고 있습니다.X Document를 이용해서 가능한지 알고 싶었을 뿐입니다.
XDeclaration을 사용합니다.그러면 선언이 추가됩니다.
근데.ToString()
원하는 출력을 얻을 수 없습니다.
사용하셔야 합니다.XDocument.Save()
그의 방법 중 하나로
전체 샘플:
var doc = new XDocument(
new XDeclaration("1.0", "utf-16", "yes"),
new XElement("blah", "blih"));
var wr = new StringWriter();
doc.Save(wr);
Console.Write(wr.ToString());
이 방법은 단연 최고의 방법이며 관리가 가장 용이합니다.
var xdoc = new XDocument(new XElement("Root", new XElement("Child", "台北 Táiběi.")));
string mystring;
using(var sw = new MemoryStream())
{
using(var strw = new StreamWriter(sw, System.Text.UTF8Encoding.UTF8))
{
xdoc.Save(strw);
mystring = System.Text.UTF8Encoding.UTF8.GetString(sw.ToArray());
}
}
암호화를 변경하면 무엇이든 바꿀 수 있기 때문에 그렇게 말합니다.UTF8 to.유니코드 또는 .UTF32
오래된 질문에 대한 답변이 늦었지만, 다른 답변들보다 더 많은 세부사항을 제공하도록 노력하겠습니다.
질문하는 것을 XML 선언이라고 합니다.
일단은.XDocument
이에 대한 유형 속성을 가지고 있습니다.다른 오버로드를 사용할 수 있습니다.XDocument
생성자:
var xdoc = new XDocument(
new XDeclaration("1.0", null, null), // <--- here
new XDocumentType("Response", null, null, "\n"), ...
);
또는 속성을 나중에 설정합니다.
xdoc.Declaration = new XDeclaration("1.0", null, null);
하지만 당신이 어떻게 저장하느냐에 따라 당신의 글을XDocument
나중에 선언(또는 그 일부)이 무시될 수 있습니다.그것에 대해서는 나중에 더.
XML 선언에는 여러 가지 모양이 있을 수 있습니다.다음은 몇 가지 유효한 예입니다.
<?xml version="1.0"?> new XDeclaration("1.0", null, null)
<?xml version="1.1"?> new XDeclaration("1.1", null, null)
<?xml version="1.0" encoding="us-ascii"?> new XDeclaration("1.0", "us-ascii", null)
<?xml version="1.0" encoding="utf-8"?> new XDeclaration("1.0", "utf-8", null)
<?xml version="1.0" encoding="utf-16"?> new XDeclaration("1.0", "utf-16", null)
<?xml version="1.0" encoding="utf-8" standalone="no"?> new XDeclaration("1.0", "utf-8", "no")
<?xml version="1.0" encoding="utf-8" standalone="yes"?> new XDeclaration("1.0", "utf-8", "yes")
<?xml version="1.0" standalone="yes"?> new XDeclaration("1.0", null, "yes")
참고:XDeclaration
잘못된 주장을 기꺼이 받아들일 것이므로 이를 올바르게 이해하는 것은 당신에게 달려 있습니다.
많은 경우에 첫번째 것은<?xml version="1.0"?>
, 당신이 요구하는 양식은 완벽합니다. (그것은 줄 필요가 없습니다.)encoding
단지 UTF-8(ASCII 포함)이고, 지정할 필요가 없는 경우standalone
그 가치가 있다면"no"
또는 DTD가 없는 경우).
참고:xdoc.ToString()
에서 오버라이드를 수행합니다.XNode
기본 클래스(의 내 버전에서).NET) 및 XML 선언을 포함하지 않습니다.다음과 같이 이 문제를 해결할 수 있는 방법을 쉽게 만들 수 있습니다.
public static string ToStringWithDecl(this XDocument d)
=> $"{d.Declaration}{Environment.NewLine}{d}";
다른 대답들 중 일부는 다음과 같은 것을 나타냅니다.XDeclaration
를 사용하면 존경받을 것입니다.xdoc.Save
아니면xdoc.WriteTo
methods, 그러나 그것은 사실이 아닙니다.
- XML 선언을 포함할 수도 있습니다.
XDocument
- 그들은 당신이 준 인코딩 대신에 대상 파일, 스트림, 라이터, 스트링 빌더 등에 의해 사용되는 인코딩을 지정할 수도 있고, 당신이 그것을 당신의 파일에서 했다면 인코딩을 생략하는 대신에 지정할 수도 있습니다.
XDeclaration
- 그들은 당신의 버전을 예에서 바꿀 수도 있습니다.
1.1
안으로1.0
물론 파일에 저장/쓰기할 때 선언문이 해당 파일의 실제 인코딩과 일치하는 것은 좋은 일입니다!
에 쓸 때 를 수 있습니다.utf-16
도)NET 문자열은 내부적으로 UTF-16에 있습니다.대신 위의 확장 방법을 사용할 수 있습니다.과 같은 할 수 :는 EricSch다.
string xdocString;
using (var hackedWriter = new SuppressEncodingStringWriter())
{
xdoc.Save(hackedWriter);
xdocString = hackedWriter.ToString();
}
사용자의 위치:
// a string writer which claims its encoding is null in order to omit encoding in XML declarations
class SuppressEncodingStringWriter : StringWriter
{
public sealed override Encoding Encoding => null;
}
추가. 을 업데이트 간에StringWriter
해당 형)TextWriter
) nullable 참조 유형을 사용하려면 , 및 등의 속성을 nullable로 결정했습니다.어쩌면 불행한 일이었을까요?어쨌든 nullable reference type이 켜져 있으면 다음과 같이 쓸 필요가 있을 수 있습니다.null!
d이 null
.
입력만 하면 됩니다.
var doc =
new XDocument (
new XDeclaration ("1.0", "utf-16", "no"),
new XElement ("blah", "blih")
);
그리고 당신은
<?xml version="1.0" encoding="utf-16" standalone="no"?>
<blah>blih</blah>
VB.NET 솔루션 코드
코드
Dim _root As XElement = <root></root>
Dim _element1 As XElement = <element1>i am element one</element1>
Dim _element2 As XElement = <element2>i am element one</element2>
_root.Add(_element1)
_root.Add(_element2)
Dim _document As New XDocument(New XDeclaration("1.0", "UTF-8", "yes"), _root)
_document.Save("c:\xmlfolder\root.xml")
출력 노트(노트장에서 출력을 여십시오)
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<root>
<element1>i am element one</element1>
<element2>i am element one</element2>
</root>
더 쉬운 방법은 다음과 같습니다.
var fullXml = $"{xDocument.Declaration}{xDocument}";
xDocument.선언문이 비어 있습니다. 추가만 하면 됩니다.
언급URL : https://stackoverflow.com/questions/957124/how-to-print-xml-version-1-0-using-xdocument
'programing' 카테고리의 다른 글
이미 멤셋 등이 있는데 ZeroMemory 등이 존재하는 이유는 무엇입니까? (0) | 2023.09.20 |
---|---|
CSS를 통해 순서 목록의 두 번째 줄에 대한 들여쓰기를 유지하는 방법은 무엇입니까? (0) | 2023.09.20 |
Oracle: 올바른 월이 아님 (0) | 2023.09.20 |
자리 표시자와 대체 개체를 사용하여 자바스크립트 문자열을 포맷하시겠습니까? (0) | 2023.09.20 |
K&R C 2장의 getbits() 방법 이해에 도움이 필요합니다. (0) | 2023.09.20 |