使用Java将属性从一个XML元素复制到另一个XML元素

时间:2014-11-17 17:01:37

标签: java xml

我正在编写一个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模式中重用多个元素上的属性节点?

1 个答案:

答案 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));
        }
    }