2011-08-25 4 views

답변

0

작동하지 않습니다. 그러나 XML 파일에는 저장되지 않습니다. 변경 내용은 Document 객체에 저장됩니다.

는 파일의 Document 객체에 저장하려면 :

OutputFormat of = new OutputFormat("XML","UTF-8",true); 
    XMLSerializer serializer = new XMLSerializer(); 
    serializer.setOutputFormat(of); 
    serializer.setOutputByteStream(new FileOutputStream(PATH)); 
    serializer.serialize(doc); 
+0

그렇다면 트리를 다시 XML로 저장해야합니다. org.w3c.dom.ls 패키지의 LSSerializer를 사용할 수 있습니다. –

-1

을 내가 왜 말할 수 없다 얼핏에서. Eclipse에서 디버거를 사용하여 자세한 정보를 제공하십시오. 메서드 및 단계 물마루에 디버그 지점을 설정하고 각 줄을 검사하십시오.

디버그 식을 사용하여 루프를 검사하여 문제의 범위를 좁히고 싶은 모든 항목이 있는지 확인하십시오.

3

전체 DOM을 생성하는 것은 다소 과잉입니다. 메모리에 전체 XML 트리가있어 대규모 문서의 경우 다소 부담이 될 수 있습니다. 당신이 그것을 필터링하지 않으려면 단순히 출력에 물건을 복사, SAX 또는 StAX를 가진

  • 구문 분석 : 나는 다음 중 하나를 제안한다.
  • 기본적으로 모든 내용을 복사하지만 입력 내용을 처리하지 않는 하나 이상의 템플릿이있는 XSLT 변환을 적용하여 필터링합니다.

옵션 2가 가장 쉽고 내 경험에 비추어 볼 때 Java의 XSLT는 빠르고 효율적인 메모리 사용이 가능하며 특히 이와 같은 간단한 사용 사례에 적합합니다.

기본 복사

<xsl:template match="node()|@*"> 
    <xsl:copy><xsl:apply-templates select="node()|@*"/><xsl:copy> 
</xsl:template> 

은 "필터":

이 두 템플릿

는 당신이 필요로 할 것이다

<xsl:template match="//*[your predicate here]"> 
    <!-- Don't do a thing --> 
</xsl:template> 

편집 : 난 그냥 당신이 방금하지 않는 것으로 나타났습니다 특정 이름은 제외하지만 정규 표현식과 일치하는 이름은 필터링하십시오. XPath 함수는 술어가 대상 노드를 선택하는 데 충분할 수 있습니다. 그러나 필요한 경우 Java String 함수를 확장을 통해 XSLT에서 사용할 수 있습니다. 이 솔루션을 약간 더 복잡하게 만들지 만 XML 구문 분석을 손에 쥐기에는 여전히 가치가 있습니다.

관련 문제