2011-10-05 7 views
1

Java를 사용하여 XML 문서의 텍스트를 바꾸려면 어떻게해야합니까?Java를 사용하여 XML 문서의 텍스트를 바꾸는 방법

출처 :

<body> 
<title>Home Owners Agreement</title> 
<p>The <b>good</b> thing about a Home Owners Agreement is that...</p> 
</body> 

원하는 출력 :

<body> 
<title>Home Owners Agreement</title> 
<p>The <b>good</b> thing about a HOA is that...</p> 
</body> 

난 단지 <p> 태그 텍스트를 교체해야합니다.

replaceText(string term, string replaceWith, org.w3c.dom.Node p){ 
     p.setTextContent(p.getTextContent().replace(term, replaceWith)); 

} 

위의 코드의 문제는 p의 모든 자식 노드가 길을 잃지이다 : 나는 다음 시도했다.

답변

1

좋아, 나는 해결책을 찾아 냈다.

이 키는 실제 노드의 텍스트를 바꾸지 않으려는 것입니다. 실제로 텍스트 만의 하위 표현이 있습니다. 나는이 코드로 필요한 것을 성취 할 수 있었다 :

private static void replace(Node root){ 
    if (root.getNodeType() == root.TEXT_NODE){ 
     root.setTextContent(root.getTextContent().replace("Home Owners Agreement", "HMO")); 
    } 
    for (int i = 0; i < root.getChildNodes().getLength(); i++){ 
     outputTextOfNode(root.getChildNodes().item(i)); 
    } 
} 
1

여기서 문제는 실제로 텍스트뿐만 아니라 노드를 대체하려고한다는 것입니다. 현재 노드의 하위 노드를 탐색하여 새 노드에 다시 추가 할 수 있습니다. 그런 다음 노드를 교체하십시오.

하지만 많은 작업이 필요하며 문서 구조에 매우 민감합니다. 예를 들어 누군가가 과 함께 <p> 태그를 감쌀 경우 파싱을 변경해야합니다.

또한이 접근법은 CPU 및 메모리 사용의 관점에서 볼 때 매우 효과적입니다. 전체 문서를 구문 분석하여 두 단어를 변경해야합니다.

내 제안은 다음과 같습니다. 정규식을 사용해보십시오. 대부분의 경우 충분히 강합니다.

xml.replaceFirst("(<p>.*?</p>)", "<p>The <b>good</b> thing about a HOA is that...</p>")

이 작동

같은 예제 코드 (적어도 귀하의 경우)를 참조하십시오.

+0

고마워. 정규 표현식은 가능하지만, 실제로해야 할 일에서 단순화됩니다. 내가 대체하는 것은 다양한 중첩 요소에 따라 달라집니다. System.Xml.XmlNode.InnerXml을 대체하여 C#을 사용하여 대체물을 쉽게 구현할 수있었습니다. – joe

관련 문제