Java에서 XML을 파일 대신 문자열로 구문 분석하는 방법은 무엇입니까?


249

다음 코드가 있습니다.

DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlFile);

파일 대신 문자열에 포함 된 XML을 구문 분석하려면 어떻게해야합니까?


7
또한 javax.xml.parsers.DocumentBuilder.parse(string)문자열이 uri (끔찍한) 라고 가정합니다.
Christophe Roussy

답변:


479

내 코드베이스 에이 기능이 있습니다.이 기능이 도움이 될 것입니다.

public static Document loadXMLFromString(String xml) throws Exception
{
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    InputSource is = new InputSource(new StringReader(xml));
    return builder.parse(is);
}

이 비슷한 질문을 참조하십시오


3
@shsteimer XML 문자열을 전달 중이며 null을 반환합니다. 예외는 발생하지 않습니다. 무엇이 잘못 되었나요?
sattu

@ satat : 당신은 새로운 질문으로 게시해야합니다. 코드를 보지 않고는 말하기가 정말 어렵습니다.
Alexander Malakhov

고마워, 많은 코드 줄을 구했는데 텍스트로 다시 변환했지만 더 좋은 방법이 있다는 것을 알았습니다!
nkuebelbeck

3
<? XML>이 있으면 빈 노드가 반환됩니다. 어떻게해야합니까?
Dejell

1
올바른 수입 명세서를 사용하고 있는지 확인하십시오.import org.xml.sax.InputSource;
Daniel Eisenreich

18

한 가지 방법은 파일이 아닌 InputSource를 사용하는 구문 분석 버전을 사용하는 것입니다.

SAX 입력 소스는 Reader 객체로 구성 할 수 있습니다. 하나의 Reader 객체는 StringReader입니다

그래서 같은

parse(new InputSource(new StringReader(myString))) may work. 

5

javadocs 는 구문 분석 메소드가 과부하되었음을 보여줍니다.

문자열 XML을 사용하여 StringStream 또는 InputSource를 작성하면 설정해야합니다.


4

문자열을 InputStream으로 변환하여 DocumentBuilder에 전달

final InputStream stream = new ByteArrayInputStream(string.getBytes(StandardCharsets.UTF_8));
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
builder.parse(stream);

편집
에 대응 bendin '인코딩에 관한 코멘트는, 참조 shsteimer 이 질문의 답을'.


1
String.getBytes ()를 피하기 때문에 StringReader를 선호하지만 일반적으로 작동합니다.
Michael Myers

3
getBytes ()를 호출하면 어떤 인코딩을 사용할 것으로 예상됩니까? 어떤 인코딩을 XML 파서에 전달하고 있습니까? 당신은 추측 할 것으로 예상합니까? 기본 인코딩이 UTF-8이 아닌 플랫폼에 있으면 어떻게됩니까?
bendin

2

이 방법을 사용하고 있습니다

public Document parseXmlFromString(String xmlString){
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    InputStream inputStream = new    ByteArrayInputStream(xmlString.getBytes());
    org.w3c.dom.Document document = builder.parse(inputStream);
    return document;
}

0

GitHub에서 제공되는 Scilca XML Progession 패키지를 사용할 수 있습니다.

XMLIterator xi = new VirtualXML.XMLIterator("<xml />");
XMLReader xr = new XMLReader(xi);
Document d = xr.parseDocument();

0

그냥 입력

this.file = File("your xml file path")
this.document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.