我正在编写一个Java程序,它将根据各种数据创建XML文件。
存在包含在整个XML中重用的URL的属性字符串。我想重用这些属性(即,将它们从一个元素复制到另一个元素)。我现在有这样的事情:
public class copyAttributes {
public static final String google_url = "http://www.google.com";
DocumentBuilderFactor docFac = DocumentBuilderFactory.newInstance();
DocumentBuilder build = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
public static Attr googleAttr = doc.createAttribute("ref:GoogleMainSite");
googleAttr.setValue(google_url);
Element rootElement = doc.createElement("Root_Element");
rootElement.setAttributeNode(googleAttr);
...如果我没有任何其他元素,到目前为止这很好。
现在,我希望多个元素包含相同的Google URL属性节点。我知道这是多余的,但我正在关注一个特别说必须重用属性的XSD。我知道你不能这样做:
Element childElement = doc.createElement("Child_Element");
childElement.setAttributeNode(googleAttr);
rootElement.appendChild(childElement);
...因为我知道你会得到一个INUSE_ATTRIBUTE_ERR(我试过,这就是我所知道的)。但是我希望重用这个属性,因为它会在整个XML中多次出现。
我确实找到了这个:sample code for copying attributes from one element to another,但当我在我的包中包含该示例“Utils”类并以这种方式调用它时:
Utils utils = new Utils();
utils.copyAttributes(rootElement, childElement);
...我收到一个“NAMESPACE_ERR:尝试以对名称空间不正确的方式创建或更改对象。”
关于此“Namespace_err”消息的信息不多。
我发现的另一个解决方案是简单地克隆一个元素。但是这也没有解决我的问题,因为在某些情况下我不想重用另一个元素的所有属性,我只想使用它们中的几个。
基本上我的问题是:如何在通过Java程序创建的XML模式中重用多个元素上的属性节点?
答案 0 :(得分:0)
你可以试试这个:
public void copyAttributes(Element from, Element to)
{
NamedNodeMap attributes = from.getAttributes();
for (int i = 0; i < attributes.getLength(); i++)
{
Attr node = (Attr) attributes.item(i);
to.setAttributeNode((Attr) node.cloneNode(false));
}
}