문제

XML을 XMLDocument에로드 할 때, 즉

XmlDocument document = new XmlDocument();
document.LoadXml(xmlData);

프로세스가 엔티티를 교체하는 것을 막을 방법이 있습니까? XML에 TM 기호 (엔티티 #8482로 저장)가 TM 문자로 변환되는 이상한 문제가 있습니다. 내가 걱정하는 한 XML 문서에 인코딩 ISO-8859-1 (TM 기호가 없음)이 있기 때문에 이것은 일어나지 않아야합니다.

감사

도움이 되었습니까?

해결책

이것은 XML 도구 세트에 대한 표준 오해입니다. "&#x"를 가진 전체 비즈니스는 문자 인코딩에 대처하도록 설계된 구문 기능입니다. XMLDocument는 문자의 흐름이 아니며 문자 인코딩 문제가 해제되었습니다. 대신 XML 유형 데이터의 추상 모델이 포함되어 있습니다. 이것에 대한 단어에는 dom과 Infoset이 포함되어 있는지, 정확히 정확한 것이 확실하지 않습니다.

이 모델에는 "&#x"구빈이 전체 문제가 관련이 없기 때문에이 모델에는 존재하지 않으며, 특정 인코딩에서 정보를 문자 스트림으로 다시 변환 할 때 적절한 경우 다시 반환됩니다.

이 오해는 비슷한 단점의 일부로 그것을 학문 문학으로 만들기에 충분히 흔합니다. 이 위치에서 "XML 열병"을 살펴보십시오. http://doi.acm.org/10.1145/1364782.1364795

다른 팁

무엇을 쓰고 있습니까? 텍스트 작가? 스트림? 무엇?

다음은 엔티티를 유지합니다 (음, 16 진수로 대체). 그러나 StringWriter와 동일하게하면 유니 코드를 감지하고 대신 사용합니다.

    XmlDocument doc = new XmlDocument();
    doc.LoadXml(@"<xml>&#8482;</xml>");
    using (MemoryStream ms = new MemoryStream())
    {
        XmlWriterSettings settings = new  XmlWriterSettings();
        settings.Encoding = Encoding.GetEncoding("ISO-8859-1");
        XmlWriter xw = XmlWriter.Create(ms, settings);
        doc.Save(xw);
        xw.Close();
        Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray()));
    }

출력 :

    <?xml version="1.0" encoding="iso-8859-1"?><xml>&#x2122;</xml>

나는 XML 문서와 인코딩과 약간 혼란스러워한다고 고백하지만 여전히 ISO-8859-1을 사용하고 있다면 다시 저장할 때 적절하게 설정되기를 바랍니다. 8, 필요하지 않을 것입니다. 어떤면에서, 논리적으로 문서에는 실제로 엔티티 참조 기호가 포함되어 있습니다. 후자는 인코딩 물질 일뿐입니다. (여기서 큰 소리로 생각하고 있습니다 - 권위있는 정보로 이것을 가져 가지 마십시오.)

문서를로드 한 후 무엇을하고 있습니까?

CDATA 섹션의 엔티티 내용을 동봉하면 모든 것을 혼자 두어야합니다.

<root>
<testnode>
<![CDATA[some text &#8482;]]>
</testnode>
</root>

엔티티 참조는 구체적으로 인코딩되지 않습니다. 에 따르면 W3C XML 1.0 권장 사항:

캐릭터 참조가 "&#x"로 시작하면 숫자와 문자가 종료됩니다. ISO/IEC 10646에서 캐릭터 코드 포인트의 16 진수 표현을 제공하십시오.

&#xxxx; 엔티티는 그들이 대표하는 캐릭터로 간주됩니다. 모든 XML은 읽기시 유니 코드로 변환되며 그러한 엔티티는 그들이 나타내는 유니 코드 문자를 위해 제거됩니다. 여기에는 LoadXML로 전달 된 문자열과 같은 유니 코드 소스에서 발생하는 모든 경우가 포함됩니다.

유사하게 쓰여진 스트림으로 표현할 수없는 모든 캐릭터를 작성하는 것은 &#xxxx로 변환됩니다. 실재. 그들을 보존하려는 포인트는 거의 없습니다.

일반적인 실수는 인코딩 다른 유니 코드를 사용하는 방법으로 DOM에서 문자열을 얻을 것으로 예상됩니다. 그것은 단지 무엇을 상관없이 일어나지 않습니다

모든 도움에 감사드립니다.

htmlencode 함수를 작성하여 내 문제를 해결하여 실제로 모든 문자를 웹 페이지로 뱉어 내기 전에 모든 문자를 대체합니다 (다소 깨진 htmlencode () .net 함수에 의존하는 대신 필요한 캐릭터)

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