使用Java读取和更新XML文件中的多级元素

时间:2015-01-08 10:20:49

标签: java xml dom

我有下面的xml文件我想用x代码更改xml文件的一些属性。 我们在这里通过java代码

更改了一些属性

Xml文件下面包含相关信息。

    <Order>
    <AllowedModifications>
    <Modification ModificationType="CHANGE_CUSTOM_ATTRIBUTES" ThroughOverride="Y"/>
    <Modification ModificationType="RECEIVING_NODE" ThroughOverride="Y"/>
    <Modification ModificationType="OTHERS" ThroughOverride="Y"/>
    </AllowedModifications>
    </Order>

如果ModificationType = OTHERS,那么我们必须更改ThroughOverride值= Y.我们如何借助java代码来实现它。

我尝试了下面的代码,但它没有改变。

    Element eleAllowedModifications = Util.getChildElement(eleOrderRoot,"AllowedModifications")
    System.out.println("First  Element "+eleAllowedModifications.getNodeName()); 
    Node staff = xmlFile.getElementsByTagName("Modification").item(0);
    NamedNodeMap attr = staff.getAttributes();
       for (int i = 0; i < attr.getLength(); i++) {
    Node nodeAttr = attr.getNamedItem("ModificationType");
    MoficationTYp =String.valueOf(nodeAttr);
    Node nodeAttr1= attr.getNamedItem("ThroughOverride");   
    MoficationTp =String.valueOf(nodeAttr);
    }

    if (MoficationTYp=="OTHERS") {
    for (int i = 0; i < attr.getLength(); i++) {
    Node nodeAttr = attr.getNamedItem("ThroughOverride");
    MoficationTYp =String.valueOf(nodeAttr);
    nodeAttr.setNodeValue("Y");                 
    }

    }

此处不会更改ThroughOverride属性的值。

2 个答案:

答案 0 :(得分:0)

如果您使用XML library(披露:我与该项目有关联),您可以使用更少的代码获得结果:

public class UpdateOrder {

    public interface Order {
        @XBUpdate("//Modification[@ModificationType='OTHERS']/@ThroughOverride")
        void updateOrder(String value);
    }
    public static void main(String[] args) throws IOException {    
        Order order = new XBProjector(Flags.TO_STRING_RENDERS_XML).io().url("res://data.xml").read(Order.class);
        order.updateOrder("N");
        System.out.println(order.toString());
    }

}

此程序打印出来:

<Order>
    <AllowedModifications>
        <Modification ModificationType="CHANGE_CUSTOM_ATTRIBUTES" ThroughOverride="Y"/>
        <Modification ModificationType="RECEIVING_NODE" ThroughOverride="Y"/>
        <Modification ModificationType="OTHERS" ThroughOverride="N"/>
    </AllowedModifications>
</Order>

答案 1 :(得分:0)

好吧,我评估使用以下代码(例如):

    Element eleAllowedModifications = Util.getChildElement(eleOrderRoot,"AllowedModifications");
    System.out.println("First  Element "+ eleAllowedModifications.getNodeName());
    Element staff = (Element)xmlFile.getElementsByTagName("Modification").item(0);
    moficationTyp = staff.getAttribute("ModificationType");
    //moficationTp = String.valueOf(nodeAttr);
    if (moficationTyp.equals("OTHERS")) {
       staff.setAttribute("ThroughOverride", "Y");
    }

其他评论:

  • 变量名称(例如MoficationTYp)应以小写字母开头。
  • 这里的循环没用;
  • String.valueOf()在这里似乎不合适。