2016-12-21 2 views
0

중첩 된 XML 계층을 포함하는 XML 페이로드가 포함 된 InputStream이 있습니다. 페이로드는 거대 할 수 있으며 가능한 한 적은 메모리를 사용하기 위해 모든 것을 스트림으로 처리해야합니다. 불행히도 내가받는 페이로드에는 값이 이고 다른 XML 문서 인 특성을 가진 태그가 포함 된 중첩 된 XML 문서가 포함되어 있습니다. 당신은 another_payload또 다른 큰 XML을 보유하고 value라는 속성을 가지고 있음을 알 수Axiom을 사용하여 특성 값을 스트리밍 할 수 있습니까

<another_payload value=&quot;&lt;xml&gt;&lt;xml/&gt;&quot;/> 

주의를 지불 :이 페이로드를 드릴 다운 할 때

<xml> 
    <payload>&lt;xml&gt;&lt;another_payload value=&quot;&lt;xml&gt;&lt;xml/&gt;&quot;/&gt;&lt;xml/&gt;<payload/> 
<xml/> 

당신은 우리에게 다음과 같습니다 것을 알 수 있습니다 문서.

속성에 메모리에로드 할 수없는 거대한 XML 문서가 포함될 수 있습니다. 내가 좋아하는 것처럼 스트림을 보내야합니다. ElementHelper::getTextAsStream

누구든지 물어보기 전에, 내가 페이드로드를 원점에서 구조화하여 더 잘 처리 할 수 ​​있도록 협상을 시도했지만, 이유가 무엇인지에 대해서는 그렇지 않습니다.

+0

질문에서 속성의 값에 대해 이야기하지만,이 예에서는 텍스트 노드로 포함 된 XML (즉, 속성의 값이 아닌 요소의 콘텐츠)을 보여줍니다. 질문을 명확히 해 주시겠습니까? –

+0

@AndreasVeithen 예제를 확장하여 다른 xml 문서를 보유하는 'value'속성을 가진 태그가있는 다른 XML 문서를 포함하는 XML 문서를 보여줍니다. –

답변

0

Axiom은 XML 구문 분석 용 StAX API를 사용하며 StAX는 긴 특성 값의 스트리밍을 지원하지 않습니다.

더 일반적으로 Axiom에 자체 XML 파서가 있어도이를 지원하는 것이 까다로울 수 있습니다. 다음 예제를 고려하십시오.

<some_element p:myattr="...long value..." xmlns:p="http://example.org"/> 

이 경우 구문 분석기는 특성 값을 스트리밍하기 전에 특성의 네임 스페이스를 확인할 수 없습니다. 공리는 어떤 형태의 게으른 네임 스페이스 해석을 지원해야하거나 속성 값 스트리밍에 대한 지원은 속성 값이 처리되기 전에 네임 스페이스가 해석 될 수있는 경우로 제한됩니다 (모든 비 한정 속성의 경우).

+0

그럼 내가 두려워했던대로 ... 안드레아스 감사합니다. –

관련 문제