복붙노트

[PYTHON] XML에서 사용하기 위해 이스케이프 문자열

PYTHON

XML에서 사용하기 위해 이스케이프 문자열

저는 Python의 xml.dom.minidom을 사용하여 XML 문서를 만듭니다. (논리 구조 -> XML 문자열, 다른 방법은 아닙니다.)

XML을 엉망으로 만들 수 없도록 제공하는 문자열을 어떻게 이스케이프 처리합니까?

해결법

  1. ==============================

    1.다음과 같은 일을한다는 것을 의미합니까?

    다음과 같은 일을한다는 것을 의미합니까?

    from xml.dom.minidom import Text, Element
    
    t = Text()
    e = Element('p')
    
    t.data = '<bar><a/><baz spam="eggs"> & blabla &entity;</>'
    e.appendChild(t)
    

    그렇다면 멋지게 이스케이프 된 XML 문자열을 얻을 수 있습니다.

    >>> e.toxml()
    '<p>&lt;bar&gt;&lt;a/&gt;&lt;baz spam=&quot;eggs&quot;&gt; &amp; blabla &amp;entity;&lt;/&gt;</p>'
    
  2. ==============================

    2.이 같은?

    이 같은?

    >>> from xml.sax.saxutils import escape
    >>> escape("< & >")   
    '&lt; &amp; &gt;'
    
  3. ==============================

    3.xml.sax.saxutils.escape는 기본적으로 &, <, and> 만 이스케이프하지만 엔티티 매개 변수를 제공하여 추가로 다른 문자열을 이스케이프 처리합니다.

    xml.sax.saxutils.escape는 기본적으로 &, <, and> 만 이스케이프하지만 엔티티 매개 변수를 제공하여 추가로 다른 문자열을 이스케이프 처리합니다.

    from xml.sax.saxutils import escape
    
    def xmlescape(data):
        return escape(data, entities={
            "'": "&apos;",
            "\"": "&quot;"
        })
    

    xml.sax.saxutils.escape는 내부적으로 str.replace ()를 사용하므로 MichealMoser의 답변에서 볼 수 있듯이 가져 오기를 건너 뛰고 고유 한 함수를 작성할 수도 있습니다.

  4. ==============================

    4.xml.sax.saxutils는 따옴표 문자 ( ")를 이스케이프하지 않습니다.

    xml.sax.saxutils는 따옴표 문자 ( ")를 이스케이프하지 않습니다.

    여기 또 다른 것이 있습니다 :

    def escape( str ):
        str = str.replace("&", "&amp;")
        str = str.replace("<", "&lt;")
        str = str.replace(">", "&gt;")
        str = str.replace("\"", "&quot;")
        return str
    

    당신이 그것을 찾으면 xml.sax.saxutils 만 문자열 바꾸기를 수행합니다.

  5. ==============================

    5.다른 프로젝트 가져 오기를 원하지 않고 이미 cgi를 갖고 있다면 다음을 사용할 수 있습니다.

    다른 프로젝트 가져 오기를 원하지 않고 이미 cgi를 갖고 있다면 다음을 사용할 수 있습니다.

    >>> import cgi
    >>> cgi.escape("< & >")
    '&lt; &amp; &gt;'
    

    그러나이 코드의 가독성은 문제가 될 수 있습니다. 의도를 더 잘 설명 할 수있는 함수에 넣어야합니다. (그리고 그 코드를 읽는 동안 단위 테스트를 작성하십시오.)

    def xml_escape(s):
        return cgi.escape(s) # escapes "<", ">" and "&"
    
  6. from https://stackoverflow.com/questions/1546717/escaping-strings-for-use-in-xml by cc-by-sa and MIT license