2016-08-18 6 views
1

私は、XMLファイルのいくつかのパラメータをjavaファイルから変更しようとしています。すべての投稿で私は人々がタグ名でそれを検索するこれらのパラメータを変更することがわかったが、私の場合は動作しません。javaを使用してxmlノードの値を変更するには? (タグ名ではない)

私のxmlファイルの例は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?> 
<comp> 
    <params> 
     <param name="id">1</param> 
     <param name="type">aaaa</param> 
     <param name="bus">123</param> 
    </params> 
</comp> 

私は「名前」でパラメータにアクセスするにはどうすればよいですか?

最後に、Javaでの私のコードは次のとおりです。

public void modifyXml(){ 
    String path = "C:\\Workspace\\Project\\data.xml"; 
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
    Document doc = docBuilder.parse(path); 
    Node comp = doc.getFirstChild(); 
    Node params = doc.getElementsByTagName("params").item(0); 
    loadParams(params); 
} 

private void loadParams(Node params) { 
    NodeList list = params.getChildNodes(); 
    for (int i = 0; i < list.getLength(); i++) { 
     Node url = list.item(i); 
     String nodeName = url.getNodeName(); 
     NamedNodeMap attributes = url.getAttributes(); 

     //System.out.println(attributes.item(i)); 
     if (nodeName.equalsIgnoreCase("param") && url.getFirstChild()!=null) { 
      ServerProperties.getExternalParamsMap().put(attributes.getNamedItem("name").getNodeValue(), url.getFirstChild().getNodeValue()); 
      System.out.println((String) url.getFirstChild().getNodeName()); 
      System.out.println(url.getFirstChild().getNodeValue()); 
     } 
    } 
} 

それは私に、ノードの値ではなく、パラメータの名前を出力します。パラメータ名は次のように表示されます: "#text"

ありがとう!

よろしくお願いいたします。

エリックP.は

+1

を変更します。 XPathを次の式で使用してください: '// param [@ name =" id "]'、 '// param [@ name =" type "]'、 '// param [@ name =" bus "]'など – EJP

答えて

1

あなたは以下の...コーディングを簡素化するためにXPathを使用したXPathとVTD-XMLに基づいたコードである必要があります。

import com.ximpleware.*; 

public class accessName { 

    public static void main(String[] args) throws VTDException{ 
     VTDGen vg = new VTDGen(); 
     if (!vg.parseFile("input.xml", false)) 
      return; 
     VTDNav vn = vg.getNav(); 
     AutoPilot ap = new AutoPilot(vn); 
     ap.selectXPath("/param[@name='id']/text()"); 
     int i=0; 
     while((i=ap.evalXPath())!=-1){ 
      System.out.println("text value "+vn.toString(i)); 
     } 
    } 
} 
+0

ありがとうございます!私はVDTの代わりに "doc"で試してみる – Eric

0

今では私の作品:

String path = "C:\\Workspace\\Project\\data.xml"; 
    File file = new File(path); 
    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory 
      .newInstance(); 
    javax.xml.parsers.DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
    Document document = documentBuilder.parse(file); 
    Node id = (Node) document.getElementsByTagName("param").item(0); 
    id.setTextContent("xxxxxxx"); 
    System.out.println(usr.getTextContent()); 

これはDOMと手でそれを記述しないでください "ID" パラメータ

関連する問題