XML 문서의 xsd 파일을 가지고 있지 않기 때문에 xmlns "http://www.w3.org/2001/XMLSchema-instance"으로 변경해야 XML 요소를 파싱 할 수 있지만 문제가 있습니다. 그것을 할 때 루트 요소 (myroot)의 xmlns 속성을 변경하면 "myxsd.xsd"값을 가진 자식 요소 (data)에 다른 속성 (xmlns)이 만들어집니다. xmlns (myxsd.xsd)의 값을 무시하거나 변경하여 문서를 올바르게 구문 분석하려고합니다. JDOM2, xmlns (xsd)가 XML 문서에서 변경하거나 제거하지 않습니다.
내 XML 입력 :<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<myroot xmlns="myxsd.xsd" class="15">
<data att1="all" att2="actual">
<myobject patt1="patt1_value" patt2="patt2_value" patt3="patt3_value">
<p name="p1">page1</p>
<p name="p2">page1</p>
<p name="p3">page1</p>
<p name="p4">page4</p>
</myobject>
</data>
</myroot>
내 XML 출력 :
<?xml version="1.0" encoding="UTF-8"?>
<myroot xmlns="http://www.w3.org/2001/XMLSchema-instance" class="15">
<data xmlns="myxsd.xsd" att1="all" att2="actual">
<myobject patt1="patt1_value" patt2="patt2_value" patt3="patt3_value">
<p name="p1">page1</p>
<p name="p2">page1</p>
<p name="p3">page1</p>
<p name="p4">page4</p>
</myobject>
</data>
</myroot>
내 코드 :
public void Edit_file() throws JDOMException, IOException {
InputStream in = new FileInputStream("C:\\small_test.xml");
SAXBuilder builder = new SAXBuilder();
Document document = builder.build(in);
// getting the root element
Element root = document.getRootElement();
Namespace tempNamespace = Namespace.getNamespace("http://www.w3.org/2001/XMLSchema-instance");
root.setNamespace(tempNamespace);
// iterating over the children
List<Element> data = root.getChildren("data");
for (Element element : data) {
Attribute id = element.getAttribute("att1");
id.setValue("New value");
}
XMLOutputter xmlOutput = new XMLOutputter();
xmlOutput.setFormat(Format.getPrettyFormat());
xmlOutput.output(document, System.out);
}
입력 XML 파일에서 xmlns 속성을 제거하고 싶지만 어떻게 작성했는지 모르겠습니다. –
그런 다음 파싱 된 XML의 JDOM 표현에있는 노드의 이름 및 기타 속성에 대한 소스 XML의 xmlns 특성의 영향을 먼저 이해해야합니다. 미안해. 내가 설명 할 수 없다면. 다시 시도해 보겠습니다 : 가장 바깥 쪽 요소의 xmlns 속성은 트리의 모든 요소의 네임 스페이스 URI를 변경하고 네임 스페이스를 없애려면 모든 요소의 이름을 변경해야합니다. –