2011-01-13 35 views
16

Tôi có đoạn mã sau:vấn đề thiết lập một giá trị nút mới trong java, dom, xml phân tích

DocumentBuilder dBuilder = dbFactory_.newDocumentBuilder(); 
StringReader reader = new StringReader(s); 
InputSource inputSource = new InputSource(reader); 
Document doc_ = dBuilder.parse(inputSource); 

và sau đó tôi muốn tạo ra một nguyên tố mới trong nút đó ngay dưới nút gốc với mã này :

Node node = doc_.createElement("New_Node"); 
node.setNodeValue("New_Node_value"); 
doc_.getDocumentElement().appendChild(node); 

Vấn đề là nút được tạo và nối nhưng giá trị không được đặt. Tôi không biết nếu tôi chỉ không thể nhìn thấy giá trị khi tôi nhìn vào xml của tôi nếu nó ẩn trong một số cách nhưng tôi không nghĩ rằng đó là trường hợp vì tôi đã cố gắng để có được giá trị nút sau khi tạo nút gọi và nó trả về null. Tôi mới sử dụng xml và dom và tôi không biết giá trị của nút mới được lưu trữ ở đâu. Nó giống như một thuộc tính?

<New_Node value="New_Node_value" /> 

hoặc dùng nó đặt giá trị ở đây:

<New_Node> New_Node_value </New_Node> 

Bất kỳ trợ giúp sẽ được đánh giá rất nhiều,

Cảm ơn, Josh

+0

Bạn đang viết DOM mới trở lại vào một tập tin? Tôi không thấy bất kỳ tài liệu tham khảo để viết, và bạn đang đề cập đến nhìn vào xml. –

+0

@ RD01 - Yea im viết lại cho một tệp. Tôi đoán câu hỏi chính của tôi vào thời điểm này là node.setNodeValue() làm gì nếu nó không đặt văn bản hoặc thuộc tính? – Grammin

Trả lời

35

Các mã sau đây:

Element node = doc_.createElement("New_Node"); 
node.setTextContent("This is the content"); //adds content 
node.setAttribute("attrib", "attrib_value"); //adds an attribute 

sản xuất:

<New_Node attrib="attrib_value">This is the content</New_Node> 

Hy vọng điều này làm rõ.

+0

Ah làm rõ, vậy node.setNodeValue() làm gì? – Grammin

+7

'setNodeValue' thay đổi dựa trên loại nút (Hãy xem bảng trong javadocs: http://download.oracle.com/javase/6/docs/api/org/w3c/dom/Node.html). Nếu nút là một 'Element' thì thiết lập nodeValue không làm gì cả, bởi vì nodeValue là' null'. – dogbane

+0

Cảm ơn bạn đã làm rõ! – Grammin

0
<New_Node value="New_Node_value" /> 

'giá trị' là một thuộc tính của

New_Node

yếu tố, để có được thành DOM tôi đề nghị bạn http://www.w3schools.com/htmldom/default.asp

+0

Tôi biết trong giá trị đó là một thuộc tính, nhưng tôi không biết giá trị là gì khi tôi setNodeValue và tại sao mã tôi đang cố gắng không hoạt động. – Grammin

1

Để làm rõ, khi bạn tạo các nút sử dụng:

Attr x = doc.createAttribute(...); 
Comment x = doc.createComment(...); 
Element x = doc.createElement(...); // as @dogbane pointed out 
Text x = doc.createTextNode(...); 

thay vì sử dụng các Node chung cho những gì bạn nhận lại từ từng phương pháp. Nó sẽ làm cho mã của bạn dễ đọc/gỡ lỗi hơn.

Thứ hai, các phương thức getNodeValue()/setNodeValue() hoạt động khác nhau tùy thuộc vào loại Nút bạn có. Xem tóm tắt của Node class để tham khảo. Đối với một Element, bạn không thể sử dụng các phương thức này, mặc dù cho một nút Text bạn có thể.

Khi @dogbane chỉ ra, hãy sử dụng setTextContent() cho văn bản giữa các thẻ của phần tử này. Lưu ý rằng điều này sẽ hủy mọi phần tử con hiện có.

0

Đây là giải pháp khác, trong trường hợp của tôi giải pháp này đang hoạt động vì hàm setTextContent() không tồn tại. Tôi đang làm việc với Bộ công cụ Web của Google (GWT) (Đây là một khung công tác phát triển Java) và tôi đã nhập khẩu thư viện XMLParser để có thể sử dụng DOM Parser.

nhập com.google.gwt.xml.client.XMLParser;

Document doc = XMLParser.createDocument();

Nút phần tử = doc.createElement ("New_Node"); node.appendChild (doc.createTextNode ("value"));

doc.appendChild (nút);

Kết quả là:

< New_Node> giá trị < /New_Node>

Các vấn đề liên quan