>Java >잘못된(오류/잘못된) XML을 구문 분석하는 방법은 무엇입니까?

잘못된(오류/잘못된) XML을 구문 분석하는 방법은 무엇입니까?

PHPz
PHPz앞으로
2024-02-09 23:20:40762검색

PHP 편집기 Baicao가 잘못된 XML 파일을 구문 분석하는 방법을 소개합니다. XML 파일을 처리할 때 형식이 올바르지 않거나 오류가 포함되어 잘못된 XML이 발생하는 경우가 있습니다. 잘못된 XML 파일을 구문 분석하는 것은 필요한 데이터를 올바르게 가져오는 데 중요한 작업입니다. 이 문제를 해결하기 위해 PHP에 내장된 함수와 라이브러리를 사용하여 잘못된 XML을 확인하고 수정할 수 있습니다. 아래에서는 유효하지 않은 XML 파일을 구문 분석하는 데 일반적으로 사용되는 몇 가지 방법을 자세히 소개합니다.

질문 내용

현재 다른 제품에서 받은 xml을 파싱하는 기능을 작업하고 있습니다. 일부 실제 고객 데이터에 대해 몇 가지 테스트를 실행하기로 결정했는데 다른 제품에서는 사용자가 유효하지 않은 것으로 간주되어야 하는 입력을 입력하도록 허용하는 것 같습니다. 어쨌든, 나는 여전히 그것을 분석하는 방법을 찾으려고 노력해야 합니다. javax.xml.parsers.documentbuilder를 사용하고 있는데 입력하는 동안 다음 오류가 발생합니다.

으아악

아시다시피 설명에 잘못된 태그가 포함된 것 같습니다(d30036ddc824403d51b03f80ff62bdc4)。现在,这个描述标签被认为是叶标签,并且内部不应该有任何嵌套标签。无论如何,这仍然是一个问题,并在 documentbuilder.parse(...)

에 예외가 생성됨).

이 XML이 유효하지 않다는 것을 알고 있지만 예상대로 유효하지 않습니다. 그러한 입력을 구문 분석하는 방법에 대한 아이디어가 있습니까?

해결 방법

"xml"은 잘못된 보다 더 나쁩니다. 잘못된 xml입니다. ; 잘 구성된 xml과 유효한 xml을 참조하세요.

위반 예측 가능성에 대한 비공식적 평가는 도움이 되지 않습니다. 텍스트 데이터가 xml이 아닙니다. 이를 처리하는 데 도움이 될 수 있는 일관된 XML 도구나 라이브러리가 없습니다.

옵션, 이상적인 것 우선:

  1. 공급업체가 직접 문제를 해결하도록 하세요. 잘 구성된 XML이 필요합니다. (기술적으로 well-formed xml이라는 용어는 중복되지만 강조하는 데 도움이 될 수 있습니다.)

  2. XML로 구문 분석하기 전에 문제를 해결하려면 허용 태그 파서를 사용하세요.

  3. 使用文本编辑器手动将数据处理为文本或 以编程方式使用字符/字符串函数。这样做 以编程方式可以从棘手到不可能作为 看起来是什么 可预测的往往不是——打破规则很少受到规则的约束

    • 对于无效字符错误,请使用正则表达式删除/替换无效字符:

      • php: preg_replace('/[^\x{0009}\x{000a}\x{000d} \x{0020}-\x{d7ff}\x{e000}-\x{fffd}]+/u', ' ', $s);
      • ruby: string.tr ("^\u{0009}\u{000a}\u{000d}\u{0020}-\u{d7ff}\u{e000‌​}-\u{fffd}", ' ')
      • javascript: inputstr.replace (/[^\x09\x0a\x0d\x20-\xff\x85\xa0-\ud7ff\ue000-\ufdcf\ufde0-\ufffd]/gm, '')
    • 对于与号,使用正则表达式将匹配项替换为 &: 信用:blhsin演示 p>

      &(?!(?:#\d+|#x[0-9a-f]+|\w+);)

请注意,上述正则表达式不会接受注释或 cdata

按照设计,标准 xml 解析器永远不会接受无效的 xml。

您唯一的选择是在解析输入之前预处理输入以删除“可预见的无效”内容,或将其包装在 cdata 中。

위 내용은 잘못된(오류/잘못된) XML을 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제