gpt4 book ai didi

Java DOM getElementByID

转载 作者:行者123 更新时间:2023-11-30 06:30:46 25 4
gpt4 key购买 nike

我在 Java 中使用 DOM 解析器将子节点添加到现有节点中。

我的 XML 是

<?xml version="1.0" encoding="iso-8859-1"?>
<chart>
<chart renderTo="pieContainer" defaultSeriesType="pie" zoomType="xy" plotBackgroundColor="null" plotBorderWidth="null" plotShadow="false"></chart>
<legend id="legendNode">
<align>center</align>
<backgroundColor>null</backgroundColor>
<borderColor>#909090</borderColor>
<borderRadius>25</borderRadius>
</legend>
</chart>

有没有什么办法可以直接在现有节点下添加子节点?我可以使用这样的东西吗?

Node myNode = nodesTheme.item(0);
this.widgetDoc.getElementById("/chart/legend").appendChild(myNode);

我的代码

import org.w3c.dom.*;
import javax.xml.parsers.*;
public class TestGetElementById {
public static void main(String[] args) throws Exception {

String widgetXMLFile = "piechart.xml";
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();

domFactory.setNamespaceAware(true);
DocumentBuilder docBuilder = domFactory.newDocumentBuilder();
Document doc = docBuilder.parse(widgetXMLFile);
Node n = doc.getElementById("/chart/legend");
//Node n = doc.getElementById("legendTag");

Element newNode = doc.createElement("root");
n.appendChild(newNode);
}
}

最佳答案

编辑:对于原始问题:是的,appendChild 的工作方式与您计划的一样,问题出在 getElementById 中。

NullPointerException 表示不存在具有该 ID 的元素。javadoc 给出了它:

http://docs.oracle.com/javase/1.5.0/docs/api/org/w3c/dom/Document.html#getElementById(java.lang.String)

The DOM implementation is expected to use the attribute Attr.isId to determine if an attribute is of type ID.

并在 Attr 的文档中进一步介绍:

http://docs.oracle.com/javase/1.5.0/docs/api/org/w3c/dom/Attr.html#isId()

所以基本上您需要一个 DTD 或一个文档架构,并且需要设置

DocumentBuilderFactory.setValidating(true)

或手动设置 IsId 属性。

我个人使用:(dirty&scala 懒惰)

import org.w3c.dom.{Document,Node,Attr,Element}

def idify ( n:Node ) {
if ( n.getNodeType() == Node.ELEMENT_NODE ){
val e = n.asInstanceOf[Element ]
if (e.hasAttributeNS(null , "id" ) )e.setIdAttributeNS(null , "id" , true )
}
val ndlist = n.getChildNodes()
for ( i <- 0 until ndlist.getLength ) idify(ndlist.item(i) )
}

肯定有更专业的方法可以做到这一点,而无需起草完整的 DTD/架构。如果有人知道,我也很好奇。

关于Java DOM getElementByID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10207774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com